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

Ser*_*ano 1 c++ pointers

我可以改变的价值pTest指向具有*pTest = 100;:

int main() {
    int *pTest = new int;
    *pTest = 100;
    cout << " Value of pTest " << *pTest;
}
Run Code Online (Sandbox Code Playgroud)

但我不能改变这个对象的数据成员*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;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Som*_*ude 7

当你使用*pCurrPtr->m_Data它等于*(pCurrPtr->m_Data),这意味着你试图取消引用该m_Data成员.并且m_Data不是指针,因此不能被解除引用.

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


YSC*_*YSC 5

这是C++语法.

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

  • dereference pCurrPtr(指向a的指针CNode),
  • 并访问该对象的m_Data成员变量(类型int).

=>一切都好.

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

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

=>但m_Data不是指向一个指针int,它一个int.这应该是你的编译器抱怨的.