Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象指针在c++;?_C++_Oop - Fatal编程技术网

C++ 对象指针在c++;?

C++ 对象指针在c++;?,c++,oop,C++,Oop,我试图了解对象是如何存储在内存(堆)中的,以及引用变量是如何工作的。我写了一个简单的程序来理解这个概念。但是为什么当函数callBar()返回地址时,我得到的是解引用地址,即*(&cat),而不是&cat #include<iostream> using std::cout; using std::string; class Cat{ public: string name; }; Cat* callBar(Cat *cat){ cat = new C

我试图了解对象是如何存储在内存(堆)中的,以及引用变量是如何工作的。我写了一个简单的程序来理解这个概念。但是为什么当函数
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;
}

我在main中创建了类的实例,并打印了它的地址。我将这个对象传递给另一个函数,然后再次打印它的地址,这给了我新的引用。至少,我尊重了它

我仍然不清楚为什么在函数返回时会得到解引用地址,即
*(&cat)
,而不是
&cat

我仍然不清楚为什么在函数返回时会得到解引用地址,即.*(&cat),而不是&cat

在调用栏内部,相关位是

Cat* callBar(...unused argument...){
    cat = new Cat();
    cout << &cat << "\n";
    cout << *(&cat) << "\n";
    return cat;
}
Cat*调用栏(…未使用的参数…){
cat=新的cat();
库特
我仍然不清楚为什么在函数返回时会得到解引用地址,即.*(&cat),而不是&cat

在调用栏内部,相关位是

Cat* callBar(...unused argument...){
    cat = new Cat();
    cout << &cat << "\n";
    cout << *(&cat) << "\n";
    return cat;
}
Cat*调用栏(…未使用的参数…){
cat=新的cat();

CUT中没有对象引用。可能是问题:对象指针是如何工作在C++中的?谢谢你的修正。我编辑了这个问题。在代码中没有对象引用。也许问题应该是:对象指针是如何工作在C++中的?谢谢你的纠正。我编辑了这个问题。它是否返回不变?我的意思是,我正在同一个引用变量cat上创建一个新对象。
cat=new cat()
如果它取消,那么地址应该匹配?@SauravJaiswal•您正在同一个
callBar
局部参数变量
cat
上创建一个新对象。这会将
cat
设置为不同的值,而不是更改调用方的
c
参数。对不起,我甚至没有注意到lin函数中的e-太困了!-/Point仍然有效-将该值赋给
cat
后,
*(&cat)
是一样的。它如何返回不变?我的意思是在同一个引用变量cat上创建一个新对象。
cat=new cat()
如果它取消,那么地址应该匹配?@SauravJaiswal•您正在同一个
callBar
局部参数变量
cat
上创建一个新对象。这会将
cat
设置为不同的值,而不是更改调用方的
c
参数。对不起,我甚至没有注意到lin函数中的e-太困了!:-/Point仍然有效-将该值指定给
cat
后,
*(&cat)
是相同的。