提问者:小点点

C++指针的指针是否自动访问新值?


我很难理解指针到指针应该如何工作,就像下面的例子一样。

假设我在某个文件的类中有以下内容

typedef object*    objectPtr;

和另一个文件,该文件包含

struct RandomStruct
{
    RandomStruct( objectPtr* obj = NULL ): ojbOwner( obj ) {}
    objectPtr*     objOwner;
}

我使用这两个类作为另一个类的成员,并像这样构造它们

Constructor():
objectPtrMember( NULL )
, RandomStructMember( &objectPtr ){}

然后在运行时通过编辑器更新ObjectPTRMember变量,使其指向一个对象,其中我的逻辑告诉我ObjOwner也将被更新,因为它指向通过编辑器更新的ObjectPTRMember,所以我的编辑器程序会说另外的话,因为ObjOwner保持为空。

关于指针,有什么我可能理解错误的地方吗? 还是我做得不对?


共2个答案

匿名用户

否,当您制作指针的副本时,副本的值独立于原始指针的值。 例如。

int *p = nullptr;
int *x = p;           // copy p into x
p = &i;               // point p somewhere
assert(x == nullptr); // but x is still nullptr

你的案子就是这样。

要获得所需的语义,可以使objowner成为对指针的引用,如下所示:

objectPointer* & objOwner;
            // ^ reference

现在,当您修改objowner所引用的指针时(假设该指针已传递给RandomStruct的构造函数),也将修改objowner指针。

匿名用户

typedef object*    objectPtr;

避免像这样混淆指针类型。

NULL

在新的C++程序中不应使用null。 它是为了向后兼容而存在的。 请改用nullptr

我的逻辑告诉我objOwner也会被更新

关于指针,有什么我可能理解错误的地方吗?

是的,你的理解有问题。 修改一个指针不会导致修改另一个指针。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|指针|指针|自动|访问|新|值)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?