Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: pointeri  (Citit de 2512 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
cr1st18
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« : Septembrie 22, 2009, 19:29:51 »

am o intrebare.....am inceput recent pointerii la sc.....profu ne-a explicat bine......da am cateva intrebari....

daca am char s[5]="info",*p;

*p=s[0]// aici pointerul p retine adresa lui s[0] ? e bine?

ma deruteaza nitzel ca am invatat ca daca pun * inaintea unei variabile care tine adresa unei valori atunci * returneaza valoarea acea.. si daca avem sa zicem p=&x atunci p=adresa valorii ;
 

si este vreo diferenta aici:  int *p;
......
....
...
p++; sau *p++; ??
« Ultima modificare: Septembrie 22, 2009, 19:35:27 de către cristi » Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #1 : Septembrie 22, 2009, 19:59:36 »

Un pointer este o adresa catre o bucata din memorie. Sigur ca este diferenta intre p ++ si (* p) ++. Prima muta pointerul pe urmatoarea adresa de memorie, iar a doua creste cu 1 valoarea din acea adresa de memorie. Uite un exemplu :

Cod:

int main () {
   char s[5]="info", *p;

   p = s;

   while (*p != 0) { // cat timp nu am ajuns la sfarsitul sirului
      printf("%c", *p); // afisez valoarea din p;
      p ++; // acum p a trecut pe urmatoarea pozitie, daca p era pe "i" a trecut pe "n";
   } // va afisa "info"

   p = s; // acum p este pe adresa primului element din s ( "i" )
   (*p) ++; // acum s[0] va trece din "i" in "j"
   p ++; // trece pe a doua pozitie ("n")
   (*p) += 3; // acum pe a doua pozitie este "q"
   puts(s);  // va afisa "jqfo"
}


Spor Smile
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #2 : Septembrie 22, 2009, 22:31:14 »

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:
Cod:
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])).
Memorat
cr1st18
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #3 : Septembrie 23, 2009, 13:26:03 »

multumesc mult....pt ambele posturi...m-am lamurit Dancing
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines