Kezdőoldal » Számítástechnika » Programozás » Valaki elmagyarázná nekem? C++

Valaki elmagyarázná nekem? C++

Figyelt kérdés

SIMPLECAT* FunctionTwo(SIMPLECAT *TheCat)

{cout <<"FunctionTwo returning \n";return TheCat;}

/*Így jó.Itt látom,hogy a függvény egy memóriacímet ad vissza igaz?*/


SIMPLECAT* FunctionTwo(SIMPLECAT *TheCat)

{cout <<"FunctionTwo returning \n";return *TheCat;}

/*Így már nem jó nem értem miért.Hisz lássátok a függvény visszatérési értékéből kiderül,hogy amit vissza fogok adni az egy mutató lesz.De mégsem jó csak akkor ha kiveszem a visszatérési értékből a * got.*/


SIMPLECAT& FunctionTwo(SIMPLECAT *TheCat)

{cout <<"FunctionTwo returning \n";return *TheCat;}

/*De így már működik nem értem miért.Most pedig megmondtam a függvénynek,hogy a visszatérési értéke egy hivatkozás lesz és még is mutatót adok vissza.*/


SIMPLECAT& FunctionTwo(SIMPLECAT *TheCat)

{cout <<"FunctionTwo returning \n";return TheCat;}

/*Így pedig egy hivatkozást ad vissza ha jól tudom így van.Mert ha igen akkor a fordító a kódkörnyezetből deríti ki,hogy most egy mutatót vagy hivatkozás ad e vissza.

Ez teljesen meg egyezik az előző függvény visszatérési értékével csak annyiból más,hogy nem raktam * jelzést a TheCat elé.*/


Szóval ha ez a függvény visszatérési értéke(SIMPLECAT)akkor az objektum másolatát adja vissza a függvény.Igaz? pl return TheCat;


Ha pedig ez a függvény visszatérési értéke(SIMPLECAT*)akkor az objektum memóriacímét fogja vissza adni.Igaz? pl return TheCat;


Ha pedig(SIMPLECAT&)akkor pedig azt amit a mutató a megadott memóriacímen tárol.Igaz? pl return *TheCat.

De viszont ez a függvény így is jól működik return TheCat.Szóval ebben az esetben(return TheCat) nem azt adja vissza amit a memóriacímen tárol hanem egy hivatkozást az az eredetinek név változatát.Ugyan az amúgy nem?Ebben az esetben a return *TheCat és a return TheCat ugyan az nem?Csak az egyik név változat míg a másik egy memória címen levő objektum.Jól mondom?


2012. febr. 23. 00:51
 1/8 A kérdező kommentje:
Írjatok léci tudnom kell a választ.
2012. febr. 23. 01:10
 2/8 A kérdező kommentje:
Köszi,hogy írtok.
2012. febr. 23. 02:45
 3/8 A kérdező kommentje:
Miért nem írtok szerintem értelmes a kérdés.
2012. febr. 23. 12:09
 4/8 anonim ***** válasza:

Szia!


Az első esetben igen jól látod egy mutatott memóriacímet ad vissza. A második eset azért nem jó,mert *TheCat -ot adsz vissza,de mivel TheCat egy pointer, *TheCat már a pointer által mutatott ÉRTÉK -et ad vissza,és nem pointert,pedig azt vár visszatérési értékként,te pedig értéket akarsz visszaadni. A harmadik eset azért működik,mert a visszatérési érték referenciáját kapod vissza. Negyedik esetben pedig a pointer címét kapod vissza. Mivel a pointer is SIMPLECAT típusú és van értéke,így a visszatérés ennek a pointernek a referenciája.

2012. febr. 23. 14:45
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

egyébként még egy példát is írok hogy megértsd pontosan a különbséget:


int szam = 6;

int* pszam = &szam;

std::cout << szam << std::endl;

std::cout << *pszam << std::endl;

std::cout << &szam << std::endl;

std::cout << pszam << std::endl;


Mi történik? Létrehozunk egy integer típusú szám változót 6 értékkel. Ez létrejön valahol a memóriában. Utána egy integer pointert is csinálunk,aminek az értéke a szam memóriacíme(referencia).

Kiíratások sorrendben:

Első esetbern nyílván megkapjuk,hogy 6

Második esetben a pointer által mutatott helyen szereplő értéket kapjuk vissza,tehát 6-ot. Harmadik esetben a szam változó memóriacímét,hisz a referenciáját íratjuk ki. Negyedik esetben pedig a pointer értékét,ami nem azonos a pointer által mutatott értékre, és mivel a pointer egy memóriacímet tárol,ezért a szam változó memóriacímét kapjuk vissza,tehát ugyanazt,amit a harmadik esetben.

2012. febr. 23. 14:59
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

14:45 válaszoló elég jól elmagyarázta.

De még mindig nem tiszta.

2012. febr. 25. 01:56
 7/8 A kérdező kommentje:

1.Az első esetben igen jól látod egy mutatott memóriacímet ad vissza.

2.Negyedik esetben pedig a pointer címét kapod vissza. Mivel a pointer is SIMPLECAT típusú és van értéke,így a visszatérés ennek a pointernek a referenciája.


Ez a kettő ugyan az akkor most mi van? :(

2012. febr. 25. 02:06
 8/8 anonim ***** válasza:

Értem mi nem tiszta. Figyelj:

1. eset SIMPLECAT* a függvény visszatérési értéke. A TheCat SIMPLECAT* azaz egy pointer. A pointer memóriacímet tárol,ezért visszatéréskor tulajdonképpen TheCat értékét ,azaz egy memóriacímet ad vissza.

4. eset Érdemes tisztázni,hogy a pointer is egy változó,létrejön a memóriában és így magának a pointernek is van memóriacíme,viszont mivel a pointer mutat valahova így az értéke is egy memóriacím. A pointernek van típusa,még pedig az általa mutatott memóriacímen található érték típusa. jelen esetben SIMPLECAT. Te visszatérési értéknek egy SIMPLECAT& -t vársz és visszaadod a TheCat pointert.És ilyenkor a pointer memóriacímét kapod vissza ,és nem pedig a pointer által mutatott memóriacímet.

2012. febr. 25. 17:40
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!