Czy C obsługuje pętlę „foreach”?

Czy C obsługuje pętlę „foreach”?
Pętla Foreach jest obciążeniem przepływu kontrolnego, który jest rodzajem struktury na pętlę, która ułatwia przejście do iteracyjnego gromadzenia danych. Osiąga to poprzez usunięcie procedury inicjalizacji.

Wiele języków programowania obsługuje Pętla Foreach Jak C#, C ++ 11 i Java, ale niektóre języki tego nie obsługują. Często zadane przez wielu użytkowników jest takie „Czy C obsługuje pętlę foreach?". W tym artykule rozwiązamy to zapytanie.

Czy C obsługuje pętlę „foreach”?

NIE, C nie obsługuje Pętla Foreach. Istnieje jednak pewne rozwiązania do korzystania z Pętla Foreach w C, jak wyjaśniono poniżej.

Rozwiązanie 1: Symulacja foreach w C za pomocą makr

Jeden sposób na symulację Pętla Foreach w C jest używa makra. makro Wygląda na to, że fragment kodu, który otrzymuje nazwę i można go wywołać za pomocą tej nazwy. Kiedy makro jest wywoływany, preprocesor zastępuje makro Nazwa z odpowiednim fragmentem kodu.

Symulować Pętla Foreach używać makro, możesz zdefiniować makro To wymaga dwóch argumentów: zmienną pętli i iterowalnego gromadzenia danych. makro może następnie rozwinąć się do standardu pętli, która itera nad kolekcją za pomocą zmiennej pętli

Rozważ następujące makro definicja:

#definicja foreach (item, tablica) \

dla (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) \
for (item = & Array [i]; & array [i] != i tablica [sizeof (tablica) / sizeof (tablica [0])]; i ++, item = & tablica [i])

Powyższe makro przyjmuje dwa argumenty: pozycja, która reprezentuje zmienną pętli, i tablicę, która reprezentuje iteracyjne gromadzenie danych. makro Następnie rozszerza się na zagnieżdżoną pętlę, która itera nad tablicą za pomocą zmiennej pętli.

Użyć makro, Możesz po prostu wywołać go ze zmienną pętli i tablicą jako argumenty, jak następuje:

int array [] = 1, 2, 3, 4, 5;
Int * przedmiot;
foreach (item, tablica)
printf („%d \ n”, * item);

Powyższy kod zostanie iterowany przez tablicę i wydrukuje każdy element za pomocą zmiennej pętli elementu. makro rozszerzy się do standardu pętli, który itera nad tablicą za pomocą zmiennej pętli.

Rozwiązanie 2: Symulacja Foreach w C za pomocą makro z połączoną listą

Na połączonej liście każdy element, znany również jako węzeł, ma wartość i wskaźnik do następnego węzła na liście. Aby iterować elementy połączonej listy, możesz utworzyć pętlę, która przemierza listę, postępując zgodnie z tymi wskaźnikami. A Pętla Foreach Można symulować w C dla połączonych list, tworząc pętlę, która itera nad każdym węzłem na liście. Oto przykład pętli For-uach dla połączonej listy w C:

#definicja foreach (węzeł, lista) \

dla (węzeł* n = głowa; n != Null; n = n-> następny)

W powyższym kodzie głowa jest wskaźnikiem do pierwszego węzła na liście. Pętla zaczyna się od ustawiania wskaźnika N na głowę, a następnie iteruje tak długo, jak N nie jest zerowe, co oznacza, że ​​na liście wciąż istnieją węzły do ​​przetworzenia. Przy każdej iteracji pętli kod wewnątrz pętli jest wykonywany dla bieżącego węzła wskazanego przez N, a następnie n jest aktualizowany do następnego węzła na liście, uzyskując dostęp do następnego wskaźnika bieżącego węzła.

Ta pętla pozwala łatwo przetwarzać każdy element na połączonej liście bez konieczności ręcznego przemierzania listy za pomocą operacji wskaźnika.

Rozwiązanie 3: Symulacja foreach w C za pomocą makr z tablicami

Makra można również używać z tablicami do symulacji Pętla Foreach w c. Do symulacji pętli Foreach w C można użyć następującego makra: tablicami:

#definicja foreach (item, tablica) \

dla (int keep = 1, \
Count = 0, \
size = sizeof (tablica) / sizeof * (tablica); \ keep && Count != rozmiar; \ keep = !Keep, Count ++) \
for (item = (tablica) + liczba; keep; keep = !trzymać)

Powyższe makro przyjmuje dwa argumenty: pozycja i tablica. pozycja wskazuje obecny element w pętli, a tablica reprezentuje zapętloną tablicę. makro używa zagnieżdżonych pętli do iterowania każdego elementu w tablicy.

Pierwszy dla konfiguracji pętli, które są używane do kontrolowania pętli. Drugi dla pętli iteruje każdy element w tablicy, zwiększając zmienną liczby i ustawiając element, aby wskazać bieżący element.

Korzystając z tego makra, możesz łatwo zasymulować pętlę foreach za pomocą tablicy w C, która może poprawić czytelność kodu i zmniejszyć ilość kodu z kotły wymaganej do iteracji przez tablicę.

Rozwiązanie 4: Symulacja Foreacha w C za pomocą arytmetyki wskaźnika

Jednym ze sposobów stworzenia pętli podobnej do Foreach w C jest wykorzystanie koncepcji arytmetyki wskaźnika.

W przypadku iteracji nad tablicą C zapewnia przydatną właściwość tablic, które zawsze kończą się elementem zerowym lub wartością wartowniczą. Tę wartość wartownika może być użyta do zaznaczenia końca tablicy, abyśmy wiedzieli, kiedy przestać iterować. Korzystając z arytmetyki wskaźnika, możemy skorzystać z tej właściwości, aby iterować elementy tablicy w prosty i idiomatyczny sposób.

Wyrażenie (i ARR) [1] w c daje wskaźnik do elementu po zakończeniu tablicy ARR. Oznacza to, że wskaźnik (i ARR) [1] wskazuje na lokalizację pamięci bezpośrednio po ostatnim elemencie tablicy. Korzystając z tego wskaźnika w pętli A, możemy iterować wszystkie elementy tablicy w następujący sposób:

int array [] = 1, 2, 3, 4, 5;
for (int * p = tablica; p < ( & array)[1]; p++)
printf („%d \ n”, * p);

W powyższym przykładzie zmienna p jest wskaźnikiem pierwszego elementu tablicy ARR. Warunek pętli p < (&arr)[1] checks if p has reached the end of the array. Finally, the expression *p gives the value of the current element pointed to by p, which is printed to the console using printf(). This code will print all the elements of the array arr.

Korzystając z tego idiomatycznego podejścia, możemy stworzyć prosty i wydajny dla każdego Jak pętla w C do iteracji nad tablicami.

Rozwiązanie 5: Symulacja foreach w pętli C za pomocą danych

W programowaniu C, aby zapętlić ciągiem, możesz użyć pętli dla warunku kończącego. Ponieważ C nie ma wbudowanego typu danych ciągów, ciągi są zwykle reprezentowane jako tablice znaków, zakończone znakiem zerowym („\ 0”).

Aby zapętlić ciąg w C, możesz zainicjować zmienną wskaźnika, aby wskazać pierwszy znak w ciągu, a następnie użyć pętli do iteracji znaków w ciągu, aż do osiągnięcia końcowego znaku zerowego.

Oto przykład zapętlania ciągu w C:

char str [] = "Hello, świat!";
char * p = str;
dla p != '\ 0'; P ++)
printf („%c”, * p);

W powyższym przykładzie wskaźnik P jest inicjowany w celu wskazania pierwszego znaku w strunie Str. Pętla dla dla każdego znaku itera w ciągu sznurka, zwiększając wskaźnik P, aż do osiągnięcia znaku zerowego. W pętli bieżący znak jest drukowany za pomocą specyfikatora formatu %C w funkcji PrintF.

Zauważ, że końcowy znak zerowy nie jest zaangażowany w wyjście pętli, ponieważ sygnalizuje koniec łańcucha. Ponadto, zapętlanie danych jest jednym rozwiązaniem do iteracji danych w C, ale nie jest bezpośrednim zamiennikiem konstrukcji pętli dla eacht znalezionych w innych językach programowania

Wniosek

Pętla Foreach jest rodzajem pętli, który umożliwia przemieszczenie iteracyjnych kolekcji danych. Podczas gdy wiele języków programowania pozwala Pętla Foreach, C nie obsługuje tego. Jednak, jak wyjaśniono powyżej, istnieje kilka sposobów symulacji Pętla Foreach w C za pomocą makra i inne techniki. Dzięki tym rozwiązaniom programistów C mogą osiągnąć tę samą funkcjonalność jak Pętla Foreach W innych językach programowania.