daca am char s[5]="info",*p;
*p=s[0]// aici pointerul p retine adresa lui s[0] ? e bine?
Nu. aici atribui pe undeva in memorie (unde indica pointerul p) valoarea(caracterul) care se afla la s[0]. Uite, poate te lamuresti mai bine asa:
Variabila | Adresa | Valoarea de la adresa respectiva
---------------------------------------------------
x | 0x001 | 5 <-┐
*p | 0x004 | 0x001 -┘
Adresa lui x poti sa o aflii prin &x. Pointerul p momentan "indica" la adresa lui x, deci folosind *p poti accesa valoarea care se afla acolo (ca si cand ai face operatii pe x).
Daca faci p+1 = 0x005, te duci la urmatoarea adresa de memorie. O poti accesa cu *(p+1) (sa vezi ce se afla acolo in memorie). Daca faci insa (*p)+1, e echivalent cu (x+1) (pentru ca la *p se afla valoarea lui x, la care.. adaugi 1).
PS: valorile "adresa" le-am pus arbitrar si reprezinta numere in hex.
PPS: daca vrei in exemplul cu *p si s[0] sa il pui pe p sa indice la inceputul lui s (adresa lui s[0]), faci direct p=s, care e echivalent cu p=
&(s[0])).