Støtter C “foreach” -løyfe?

Støtter C “foreach” -løyfe?
De Foreach Loop er en kontrollstrømuttalelse som er en slags for-loop-struktur som letter overtredelsen av Iterable Data Collection. Det oppnår dette ved å fjerne initialiseringsprosedyren.

Mange programmeringsspråk støtter Foreach Loop Som C#, C ++ 11 og Java, men noen språk støtter ikke det. Et vanlig spørsmål stilt av mange brukere er at “Støtter C for loop?”. I denne artikkelen skal vi ta opp denne spørringen.

Støtter C “foreach” -løyfe?

Nei, C støtter ikke Foreach Loop. Imidlertid er det noen løsninger å bruke Foreach Loop I C som forklart nedenfor.

Løsning 1: Simulering av foreach i C ved hjelp av makroer

En måte å simulere en Foreach Loop I C bruker Makroer. De makro Virker som et fragment av koden som får et navn og kan påberopes ved hjelp av det navnet. Når makro påberopes, forbeholdet erstatter makro Navn med det tilsvarende kodefragmentet.

For å simulere a Foreach Loop bruker en makro, du kan definere en makro Det tar to argumenter: en løkkevariabel og en iterable datainnsamling. De makro kan deretter utvide til en standard for sløyfe som itererer over samlingen ved hjelp av loopvariabelen

Vurder følgende makro definisjon:

#Define foreach (vare, matrise) \

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

Ovennevnte makro tar to argumenter: element, som representerer Loop -variabelen, og Array, som representerer Iterable Data Collection. De makro utvides deretter til en nestet for sløyfe som itererer over matrisen ved hjelp av løkkenvariabelen.

Å bruke makro, Du kan ganske enkelt påkalle den med Loop -variabelen og matrisen som argumenter, som følger:

int array [] = 1, 2, 3, 4, 5;
int * vare;
foreach (vare, matrise)
printf ("%d \ n", * element);

Ovennevnte kode vil iterere over matrisen og skrive ut hvert element ved å bruke variabelen. De makro vil utvide til en standard for loop som itererer over matrisen ved hjelp av loopvariabelen.

Løsning 2: Simulere foreach i C ved hjelp av makro med koblet liste

I en koblet liste har hvert element, også kjent som en node, en verdi og en peker til neste node på listen. For å iterere over elementene på den koblede listen, kan du opprette en sløyfe som krysser listen ved å følge disse pekerne. EN Foreach Loop kan simuleres i C for koblede lister ved å lage en sløyfe som itererer over hver node i listen. Her er et eksempel på en for-hver sløyfe for en lenket liste i C:

#Define foreach (node, liste) \

for (node* n = hode; n != Null; n = n-> neste)

I koden ovenfor er hodet en peker til den første noden i listen. Løyfen starter med å sette pekeren N til hodet, og deretter iterateres så lenge n ikke er null, noe som betyr at det fremdeles er noder i listen som skal behandles. Ved hver iterasjon av sløyfen blir koden inne i løkken utført for den gjeldende noden som er pekt på av N, og deretter blir N oppdatert for å peke til neste node i listen ved å få tilgang til neste peker i den gjeldende noden.

Denne sløyfen lar deg enkelt behandle hvert element i den koblede listen uten å måtte krysse listen manuelt ved hjelp av pekeroperasjoner.

Løsning 3: Simulere foreach i C ved hjelp av makroer med matriser

Makroer kan også brukes med matriser for å simulere Foreach Loop i c. Følgende makro kan brukes til å simulere foreach -sløyfe i C med matriser:

#Define foreach (vare, matrise) \

for (int Keep = 1, \
telle = 0, \
størrelse = størrelse av (matrise) / størrelse av * (matrise); \ Keep && telling != størrelse; \ Keep = !beholde, telle ++) \
for (item = (array) + count; hold; hold = !beholde)

Ovennevnte makro tar to argumenter: element og matrise. Elementet indikerer det nåværende elementet i løkken, og matrisen representerer matrisen som er loopet over. De makro bruker nestet for løkker for å iterere over hvert element i matrisen.

Den første for loop setter opp variabler som brukes til å kontrollere sløyfen. Det andre for loop itererer over hvert element i matrisen ved å øke tellevariabelen og sette elementet for å peke på det nåværende elementet.

Ved hjelp av denne makroen kan du enkelt simulere en foreach -sløyfe over en matrise i C, noe som kan forbedre kodelesbarheten og redusere mengden kjeleplatekode som kreves for å iterere over en matrise.

Løsning 4: Simulere foreach i C ved bruk av pekeraritmetikk

En av måtene å lage en foreach-lignende sløyfe i C er ved å bruke begrepet peker aritmetikk.

Når det. Denne sentinelverdien kan brukes til å markere slutten av matrisen slik at vi vet når vi skal stoppe itering. Ved å bruke pekeraritmetikk, kan vi dra nytte av denne egenskapen for å iterere over elementene i en matrise på en enkel og idiomatisk måte.

Uttrykket (& arr) [1] i C gir en peker til elementet etter enden av matrisen ARR. Dette betyr at pekeren (& arr) [1] peker på minneplassen rett etter det siste elementet i matrisen. Ved å bruke denne pekeren i en for loop, kan vi iterere over alle elementene i matrisen som følger:

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

I eksemplet ovenfor er variabelen P en peker til det første elementet i matrisen ARR. Sløyfetilstanden 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.

Ved å bruke denne idiomatiske tilnærmingen, kan vi lage en enkel og effektiv for hver som sløyfe i C for itering over matriser.

Løsning 5: Simulere foreach i C -looping med data

I C -programmering, for å sløyfe gjennom en streng, kan du bruke en for sløyfe med en avsluttende tilstand. Siden C ikke har en innebygd strengdatatype, er strenger vanligvis representert som matriser av tegn, avsluttet med nullkarakter ('\ 0').

For å sløyfe gjennom en streng i C, kan du initialisere en pekervariabel for å peke på det første tegnet i strengen, og deretter bruke en for loop for å iterere over tegnene i strengen til det avsluttes nulltegn er nådd.

Her er et eksempel på å sløyfe gjennom en streng i C:

char str [] = "hei, verden!";
char * p = str;
for (;* P != '\ 0'; P ++)
printf ("%c", * p);

I eksemplet ovenfor blir pekeren P initialisert for å peke på det første tegnet i strengen Str. For -loopen itererer deretter over hvert tegn i strengen ved å øke pekeren P til nulltegnet er nådd. Innenfor sløyfen skrives det gjeldende tegnet ved hjelp av %C -formatspesifikasjonen i Printf -funksjonen.

Legg merke til at et avsluttende null -tegn ikke er involvert i utgangen fra løkken, siden det signaliserer enden av strengen. Videre er looping med data en løsning for å iterere over data i C, men det er ikke en direkte erstatning for for-hver-sløyfekonstruksjonen som finnes i andre programmeringsspråk

Konklusjon

De Foreach Loop er en type for-loop som tillater gjennomgang av iterable datasamlinger. Mens mange programmeringsspråk tillater Foreach Loop, C støtter ikke det. Som forklart ovenfor er det imidlertid flere måter å simulere Foreach Loop i C ved bruk av Makroer og andre teknikker. Med disse løsningene kan C -programmerere oppnå den samme funksjonaliteten som Foreach Loop på andre programmeringsspråk.