HM, prilicno komplikovan program, koji zahteva odlicno poznavanje pokazivaca i aritmetike doticnih.
Code:
int *b[] = { a, a+1, a+2, a+3, a+4 };
b je niz pokazivaca na integere. Moze se zapisati i malo drugacije:
Code:
int *b[] = { &a[0], &a[1], &a[2], &a[3], &a[4] };
Zatim:
Code:
int **c = b;
Deklarises c kao pokazivac na pokazivac na niz integera.
c sadrzi adresu pokazivaca b.
*c sadrzi adresu niza b.
**c sadrzi elemenat *b[0]
Code:
while (c-b != 5)
Znaci ponavljas petlju sve dok razlika adresa c i b ne bude bila ==5, tj dok c ne bude pokazivao na *b[5]!!!!
Code:
if(c-b > 5) c -= 5;
Ukoliko je razlika izmedju adresa c i b veca od 5 onda smanjujes c za 5, tako da c i dalje pokazuje
na niz b.
Code:
**c = *(a + 4 - i);
Elementu niza *b[] na koji pokazuje c dodeljujes vrednost elementa a[4-i].
Code:
c += 2; i = (i + 2)%5;
Pokazivac c efektivno pomeras za dva mesta, tj ako je pokazivao na *b[0] sada pokazuje na elemenat *b[2].
I naravno i povecavas za 2, pa moduo 5.
Code:
for(c--; c>b; c--) printf("%d", **c);
Na izlazu iz petlje c je pokazivao na *b[5]. Po inicijalizaciji for petlje c se smanjuje za 1 pa sada pokazuje na
*b[4].
Zatim proverava da li je c stigao do *b[0], ako nije stampa elemenat na koji pokazuje c. Smanjuje c za jedan,
efekat kao gore.
Ovaj for u sustini ispisuje niz b[4],b[3],b[2],b[1].
I jos jedan savet za kraj.
Ako imas ovako neki zadatak sa pokazivacima koristi Debug opciju kompajlera, dodaj watch za sve vaznije
promenljive i onda prolazi kroz program korak po korak. Sa malo strpljenja shvatices logiku programa i sto je
jos vaznije lakse ces nauciti pokazivace i njihovu logiku.
Pozdrav
[Ovu poruku je menjao Igor Gajic dana 11.06.2006. u 20:21 GMT+1]