Citat:
Ursprungligen postat av
Tiger-Lily
Okej, jag har klurat på ett exempel, där jag har svårt att förstå hur jag ska använda pekare.
Säg att jag har en for-sats. for(int i = 0; i < 8; i++)
Detta är ju ett helt vanligt sätt att deklarera en for-sats.
Säg nu att jag vill göra detta med pekare. Det är här jag går bet, för jag förstår inte när, var hur, jag ska peka och vad som gör vad.
För att kunna använda pekare, måste jag ha något att peka mot. Dvs, jag måste fortfarande ha en int i = 0. Jag måste också ha en pekare, som pekar på int i = 0.
så:
int i = 0;
int *pekare = &i;
Men sen då? Det är här jag faller platt. for(*pekare = i; *pekare < 8; *pekare++) ???
Ja, det är korrekt. Du måste ha en integer och en pekare till den integern om du vill göra ovanstående (observera att jag lade till
& framför
i). Fast det är ju inte praktiskt eller hur? Pekare används lite mer fördelaktigt i andra sammanhang.
Ett sätt att använda pekare i en for-loop på ett lite mer konstruktivt sätt är följande...
Kod:
char txt[] = "sträng";
char* iter;
for (iter = txt; *iter != '\0'; iter ++)
if (*iter == 'X') *iter = 'O';
I detta fall pekar char-pekaren
iter (förkortning av iterator) initialt på adressen för det första tecknet i teckensträngen. Sedan stegar pekaren genom strängen tecken för tecken tills den stöter på null-terminatorn. Om värdet som iteratorn pekar på är ett 'X', så sätter vi dit ett 'O' istället på den adressen.
Detta hade kunnat göras med indexering istället...
Kod:
char txt[] = "sträng";
size_t idx;
for (idx = 0; txt[idx] != '\0'; idx ++)
if (txt[idx] == 'X') txt[idx] = 'O';
...men nu valde vi att göra det med pekare.