我们如何在指针中存储对对象的引用?

时间:2019-11-27 21:26:31

标签: c++ c++11 pointers reference

我正在考虑此解决方案,但不确定是否正确。

Type* myObjP;

void setSmth(Type& toBePassed) {
  myObjP = *toBePassed;
};

3 个答案:

答案 0 :(得分:9)

从语法上讲,您需要使用:

void setSmth(Type& toBePassed) {
  myObjP = &toBePassed; // Addressof operator rather than dereference operator.
}

警告语

使用这种机制时,取消引用myObjP时必须非常小心。如果传递给setSmth的对象不是活动的,则取消引用myObjP将导致未定义的行为。

语言中有更强大的机制,但是如果没有其他上下文,很难提出任何建议。

答案 1 :(得分:1)

toBePassed是引用,而不是指针。因此,您实际上需要&运算符(运算符的地址),而不是*运算符(取消引用运算符):

myObjP = &toBePassed;

注意:您并不是真正在指针中存储引用。您只是在存储指向所引用对象的常规指针。

答案 2 :(得分:1)

您可以尝试。 您应该使用&运算符来传递指向指针的地址。

double* myObjP;

void setSmth(double& toBePassed) 
{
    myObjP = &toBePassed;
};

int main()
{
    double testValue{8.0};
    setSmth(testValue);

    if (testValue == *myObjP)
    {
        cout << "We store a reference to an object in the pointer\n";
        cout << "testValue ==> " << testValue << "   " << "*myObjP ==> " << *myObjP<<std::endl;
    }

    std::getchar();

}