[ sammo @ 01.12.2010. 13:52 ] @
pozdrav svima ,
imam problem (; , ove pontere ne mogu nikako da razumim, da budem sa tim nacisto. imam par pitanja , pa ako mi to neko od vas moze da priblizi. hvala.
ovdje cu vam pokazati sta razumijem ili mislim sta razumijem , kao i svakako sta znam da ne razumijem.

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???
*x=5; //5 ce biti pohranjeno tamo gdje x pokazuje , a gdje pokazuje x??? 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.


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.
[ Mihajlo Cvetanović @ 01.12.2010. 14:25 ] @
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
[ sammo @ 01.12.2010. 16:43 ] @
pono hvala na konkretnom i jednostvanom odgovoru. pozdrav
[ miki208 @ 01.12.2010. 20:46 ] @
evo ti neki primeri
Code:

int z; //deklaracija promenljive
int *p; //deklaracija pokazivaca (trenutno ne pokazuje na nista)
p=&z; 
/*ovo znaci da bilo sta uradimo sa ovim pokazivacem p,ustvari
 manipulisemo promenljivom z,tj pokazivac p sadrzi samo adresu promenljive z */
*p=23; //na ovaj nacin smo dereferencirali pokazivac,tj dodelili smo vrednost 23 promenljivoj z

Kada deklarisemo pokazivac p,mozemo ga odmah inicijalizovati nekom adresom ,a mozemo ga ostaviti,ali najbolje je ukoliko ne mislite da dodelite adresu pokazivacu odmah inicijalizujte pokazivac sa NULL.
int *p=0;
Kada mu dodeljujemo adresu neke promenljive to radimo na ovaj nacin:
p=&z;
Vazno je da pokazivac samo cuva adresu promenljive.
Code:

#include <iostream.h>
#include <cstdlib>
using namespace std;
int main(){
int z=23;
int *p;
p=&z;
cout << p << endl;
cout << *p << endl;
cout << z << endl;
cout << &z << endl;
system("PAUSE");
return 0;
}

Izlaz ce biti ovakav:
0x22ff74
23
23
0x22ff74
I kada smo zatrazili adresu pokazivaca videli smo da je to u stavri ista memorijska lokacija koju ima promenljiva z.
[ MasterRW @ 09.12.2010. 01:36 ] @
Samo nisu u pitanju objekti već promenljive. Objekti su nešto drugo.