我可以用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;
}
为什么会这样?
答案 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
。这应该是您的编译器抱怨的。