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

时间:2019-01-18 13:06:11

标签: c++ pointers

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

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;
}

为什么会这样?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

这是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。这应该是您的编译器抱怨的。