Kezdőoldal » Számítástechnika » Programozás » C++ mi a különbség pointer és...

C++ mi a különbség pointer és referencia közt?

Figyelt kérdés

Egyszerűen ne tiszta ez a pointer dolog.

Az alábbi két programrészt írtam:


void Swamp(int &x, int &y)

{

int temp = x;

x = y;

y = temp;

}

Meghívás: Swamp(a,b);


void Swap2( int *x, int *y)

{

int temp = *x;

*x = *y;

*y = temp;

}

Meghívás:

int* pa = &a;

int* pb = &b;

Swap2(pa,pb);


A két függvény ugyanazt eredményezi(a és b felcserélődik), akkor mégis mi a különbség?



2014. jan. 5. 18:32
 1/10 anonim ***** válasza:
69%

pointer memóriacímre mutat.

referencia lényegében ugyanaz a változó amire mutat de ami azzal a változóval történik az történik a referenciával is.

2014. jan. 5. 19:02
Hasznos számodra ez a válasz?
 2/10 iostream ***** válasza:
100%

Technikailag mondhatod azt, hogy a referencia egy olyan pointer, ami konstans, nem lehet null, és automatikusan dereferálódik.

Ami miatt érdemes volt bevezetni őket az az operátor túlterhelés. Képzelj el egy tömb osztályt, és így kéne használni:

MyTomb<int> myTomb;

*myTomb[i] = 2;


Vagy próbálj meg másolókonstruktort írni referencia nélkül, és aztán jobbértékkel inicializálni.

2014. jan. 5. 19:24
Hasznos számodra ez a válasz?
 3/10 iostream ***** válasza:
100%

"pointer memóriacímre mutat."


Nem, a pointer egy memóriacím. Mutat valahova a memóriába.


"referencia lényegében ugyanaz a változó amire mutat de ami azzal a változóval történik az történik a referenciával is."


A referencia egy (másik, azért zárójelben, mert nincs minden objektumnak neve) név egy már létező objektumra. Nem lemásolja a változásait a változónak, ténylegesen ugyanaz az objektum a memóriában.


A különbség kb olyan, mint a symlink és a hardlink között.

2014. jan. 5. 19:26
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:

Köszönöm a válaszokat, de ugyanúgy nem értem.

(Mgj.: Teljesen kezdő vagyok programozásban és C++-ban)


A pointer "valami" memóriacíme, ez eddig tiszta. Ezzel a memóriacímmel el tudom érni a változót.


DE akkor mire jó a referencia?

"A referencia egy (másik, azért zárójelben, mert nincs minden objektumnak neve) név egy már létező objektumra. Nem lemásolja a változásait a változónak, ténylegesen ugyanaz az objektum a memóriában."

Ezt ne tudom megtenni pointerrel?


"Vagy próbálj meg másolókonstruktort írni referencia nélkül, és aztán jobbértékkel inicializálni." Ööö tessék?

2014. jan. 5. 20:34
 5/10 A kérdező kommentje:

[link]

(Hátha valaki másnak is kell majd ez a cikk)

Időközben találta ezt itt egy kezdőnek is érthetően van leírva.

2014. jan. 5. 20:57
 6/10 iostream ***** válasza:
Ez a cikk egyébként hasznos, meg minden, de nem írja le, miért van referencia. Azt írja le, hogy hogy használd, és leírja, hogy mi az, de azt valószínűleg itt sem értetted, mert ugyanazt írta, mint én.
2014. jan. 5. 23:25
Hasznos számodra ez a válasz?
 7/10 A kérdező kommentje:

Abban ne kételkedem, hogy továbbra sem értem teljesen sem a referenciát, sem a pointert, ugyanakkor sokkal értelmesebben leírta a cikk hogyan is használjam őket ha kell, mint a legtöbb írás amibe eddig belefutottam, beleérve a C++ programozási nyelv című könyvet.


Hogy fogalmazza meg, a szakrizsa tök jó meg minden de nekem pl. sem az objektum, sem a hardlink, se a másolókonstrukot, sem a többi elvont programozási szakszó nem mond semmit.


Ha el tudod mondani úgy hogy egy 0 programozási ismeretű ember is megértse megköszönöm, de az eddigi válaszok kb. annyit értek mint szarnak a pofon. (Nem kötözködés vagy bunkóság csak szófordulat.)


Ui.: Sajnos kénytelen vagyok ilyen cikkekből tanulgatni révén, hogy a magyar nyelvű C++ irodalom vagy feltételez egy programozási előismeretet (pl.: c), vagy teljesen elvont lsd.: C++ programozási nyelv című könyv.


Angol nyelvű anyagokból meg sokra nem megyek a gyatra angoltudásommal.

2014. jan. 6. 01:42
 8/10 anonim ***** válasza:
50%

Pointer: memória cím (ami valójában 32/64bites unsigned int, OStől függ)


Referencia: van 2 azonos típusú változód, de ezeket egy

memóriacímen tárolja.


Lényege az, hogy a pointer memóriacímet ad, és ha

menet közben változik az, amire mutat, akkor a pointer

NEM változik! Referencia pedig igen!


van egy változód, amit használni akarsz, legyen az egy

class.

Eltárolod a címét egy pointerben és egy referenciában.

Idővel a változót destroyolod, beállítod NULL-ra, mert

már nincs rá szükséged.


A pointerbe az a cím lesz, amit használt a változó, a

referencia pedig NULL lesz.


Ha a pointert akkor hívod, miután már kilőtted a classt,

kapsz szép eaccessviolationt.


Ez az alapvető különbség.


A példaprocban meg tök mindegy, hogy csinálod,

mivel ekkora kódnál nincs jelentősége.


Ehhez picit érteni kellene a compiler működését :)

2014. jan. 6. 04:20
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

Egyébként hülyeség maga a példa is, összevissza referálsz :)


Jah, a különbség valójában az, hogy hány lépésben

hajtod végre a műveletet.

2014. jan. 6. 04:27
Hasznos számodra ez a válasz?
 10/10 iostream ***** válasza:

"A pointerbe az a cím lesz, amit használt a változó, a

referencia pedig NULL lesz."


Mi? Mi? Mi? A referencia NULL lesz?

2014. jan. 6. 10:13
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!