Я пытался понять, как объекты хранятся в памяти (куче) и как работает ссылочная переменная. Я написал простую программу, чтобы понять концепцию. Но почему я получаю разыменованный адрес, т.е. *(&cat)
, но не &cat
, когда функция callBar()
возвращает адрес?
#include<iostream>
using std::cout;
using std::string;
class Cat{
public: string name;
};
Cat* callBar(Cat *cat){
cat = new Cat();
cout<<&cat<<"\n";
cout<<*(&cat)<<"\n";
return cat;
}
int main(void){
Cat *c = new Cat();
cout<<&c<<"\n";
cout<<callBar(c)<<"\n";
cout<<*(&c)<<"\n";
return 0;
}
Результат кода:
0x7ffd38985d70
0x7ffd38985d48
0x56368fbd22b0
0x56368fbd22b0
0x56368fbd1e70
Я создал экземпляр класса в основном и распечатал его адрес. Я передал этот объект другой функции, а затем снова распечатал его адрес, что дало мне новую ссылку. Атласт, я уважал его.
Мне все еще не ясно, почему я получаю разыменованный адрес, т.е. *(&cat)
, но не &cat
, когда функция возвращает?