Citat:
sammo:
int *x,*y,z; // x ,y su ponteri koji pokazuju na objekte tipa int , varijabla z moze da pohrani objekti tipa int,
x=y ; // x pokazuje tamo gdje y pokazuje , eh sad moje misljenje je da se samo vrijednost x mjenja a da y zadrzava svoje prvobitno stanje ,
///dali sam u pravu???
Da, vrednost pointera x se promenila. "Strelica" sad pokazuje na ono na šta pokazuje "y strelica".
Citat:
*x=5; //5 ce biti pohranjeno tamo gdje x pokazuje , a gdje pokazuje x???
x pokazuje tamo gde je i ranije pokazivao. U ovom konkretnom slučaju, pošto ni y ne pokazuje ni našta posebno, onda ni x neće pokazivati ni našta posebno. Pošto x ne pokazuje ni našta posebno onda je rad sa x* nedefinisan (undefined behavior - niko ne može da predvidi šta će se desiti). Ako imaš sreće program će prekinuti rad s porukom greške. Ako nemaš sreće program će nastaviti rad, ali će raditi pogrešno na možda jedva primetan način.
Citat:
dali ako su y,x pointeri , pa ako ovo napisemo x=y , dal znaci ako se promjeni vrijednost jednog da se automatski promjeni vrijednost i drugog.
Da, automatski se menja. Dve "strelice" pokazuju na istu "kućicu". Kad ovako promeniš sadržaj "kućice" onda sve one "strelice" koje pokazuju na tu "kućicu" sad vide promenjen sadržaj kućice.
Citat:
z=*y; //z dobiva int vrijednost, na koju y pokazuje (5) , moje misljenje je da bi z trebalo da dobije neku vrijednost od z , koaj u ovom slucaju nije definisana.
Ako si u prethodnom koraku imao sreće onda je program prekinut, i ova instrukcija se neće izvršiti. Ako u prethodnom koraku nisi imao sreće onda će verovatno z ovde dobiti vrednost 5, jer x i y pokazuju na isto mesto u memoriji (ko zna koje), i na tom mestu je vrednost 5.
Da bi ova ideja bila bolje ilustrovana, i da kod ne bi imao nedefinisano ponašanje treba ovako da izgleda:
Code:
int a = 3;
int *x,*y,z;
y = &a; // y pokazuje na a
x=y; // sad i x pokazuje na a
*x=5; // a dobija vrednost 5
z=*y; // sad i z dobija vrednost 5