(C++) Pointer esetében mi a különbség a "&p" és a sima "p" között?
Hogy érthetőbb legyen:
int main()
{
int *p;
cout<<p<<endl<<&p<<endl<<*p<<endl;
return 0;
}
Pointer esetében tudtommal az alap "p" a memória címet tartalmazza. Alapból meg a változók esetében, a prefix & úgy szintén a memória címet tartalmazza. Pointer esetében ez hogyan is működik pontosan?
Mert nekem ezzel a programmal az első két sorban más memória helyeket ad meg. Ha esetleg be vezetek egy változót és azt a memória címet adom meg neki, akkor is eltér, de csak "kicsivel" az utolsó karakter tér csak el, de akkor is eltér :)
Tehát mi mit jelez?
Ha valamit rosszul fogalmaztam volna bocsánat, csak egész nap ezzel szórakoztam, és már belefáradtam :D
cout<<p<<endl<<&p<<endl<<*p<<endl;
akar lenni, csak valamiért rosszul másolta
Ez jó ez szórakozik velem, tök máshogy írja ki :D
Na de lényegtelen, úgy is tudni fogjátok hogy van helyesen :D
Tehat van egy mutato int *p;
Ha erteket akarodi kiirni akkor printf(%d\n,*p);
Itt az asott memoria cimen levo erteket irja nem a memoria cimet.
Ha memoria cimet akarsz akkor printf(%x\n,p); igy hexaba kiirja a cimet.
A &p az jelen esetben megfelel egy int **t mutatonak.
Akor hasznaljak ha pld egy fugveny parametere int ** tipusu....
Namarmost a fenti kodreszlet mindig mas es mas ertket ir ki..
Ez azert van mert nincs alapertek adva a mutatonak....
O mutat (matat ) alamere aztan kiiratot a cimet ahova mutat es azt hogy az adott cimen mi van ....hat barmi lehet...nagy valoszinuseggel memoriaszemet...
Kerek zold pacsit...
&p -> a p pointer memóriacíme
p -> a p pointer értéke = a mutatott cím
*p -> a p által mutatott "változó" értéke (jelen esetben egy int)
(nem muszáj, hogy változó legyen)
"Ha esetleg be vezetek egy változót és azt a memória címet adom meg neki, akkor is eltér, de csak "kicsivel" az utolsó karakter tér csak el, de akkor is eltér :) "
Ez ugye azért van, mert a stacken ül egy pointer meg az int egymás mellett, az elejük sizeof(int)-nyi távolságra. Ekkor a mutató az int címét fogja tárolni, a mutató címe meg az int címéhez képest lesz sizeof(int)-tel eltolva.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!