通过指向对象数据成员的指针更改该对象的值

Change the value of an object data member through a pointer to that object

本文关键字:对象 指针 数据成员      更新时间:2023-10-16

我可以用*pTest = 100;更改pTest指向的值:

int main() {
    int *pTest = new int;
    *pTest = 100;
    cout << " Value of pTest " << *pTest;
}

但是我不能用*pCurrPtr->m_Data = 1;更改此对象的数据成员:

class CNode {
public:
    int m_Data;
    CNode *m_pLinkedList;
};
int main() {
    CNode *pHeadPtr, *pCurrPtr, *pTailPtr, *pDeleteThisNode;
    pCurrPtr = new CNode;
    pCurrPtr->m_Data = 1;//won't compile with *pCurrPtr->m_Data = 1;
    cout << "data is " << pCurrPtr->m_Data;
}

为什么会这样?

当你使用*pCurrPtr->m_Data它等于*(pCurrPtr->m_Data),这意味着你试图取消引用m_Data成员。m_Data不是指针,因此无法取消引用。

如果要取消引用(实际)指针pCurrPtr已经使用"arrow"运算符->pCurrPtr->m_Data等于(*pCurrPtr).m_Data

这是

C++语法。

pCurrPtr->m_Data相当于(*pCurrPtr).m_Data

  • 取消引用pCurrPtr(它是指向CNode的指针),
  • 并访问该对象的m_Data成员变量(类型为 int)。

=> 一切都很好。

*pCurrPtr->m_Data相当于*(pCurrPtr->m_Data)*((*pCurrPtr).m_Data)

  • 取消引用pCurrPtr(它是指向CNode的指针),
  • 访问该对象的m_Data成员变量(类型为 int
  • ),
  • 。以取消引用它。

=>但m_Data不是指向int的指针,而是int这应该是你的编译器抱怨的。