【发布时间】:2020-07-12 14:29:13
【问题描述】:
我试图了解对象如何存储在内存(堆)中以及引用变量的工作原理。我写了一个简单的程序来理解这个概念。但是,当函数callBar() 返回地址时,为什么我得到取消引用的地址,即*(&cat) 而不是&cat?
#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
我在 main 中创建了类的实例并打印了它的地址。我将这个对象传递给另一个函数,然后再次打印它的地址,这给了我新的参考。 Atlast,我尊重它。
我仍然不清楚为什么我会在函数返回时得到取消引用的地址,即*(&cat),而不是&cat?
【问题讨论】:
-
提供的代码中没有对象引用。也许问题应该是:对象指针在 c++ 中是如何工作的?