我可以改变的价值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)
为什么会这样?
当你使用*pCurrPtr->m_Data它等于*(pCurrPtr->m_Data),这意味着你试图取消引用该m_Data成员.并且m_Data不是指针,因此不能被解除引用.
如果要取消引用pCurrPtr已经使用"箭头"运算符完成的(实际)指针->:pCurrPtr->m_Data等于(*pCurrPtr).m_Data.
这是C++语法.
pCurrPtr->m_Data相当于(*pCurrPtr).m_Data:
pCurrPtr(指向a的指针CNode),m_Data成员变量(类型int).=>一切都好.
*pCurrPtr->m_Data相当于*(pCurrPtr->m_Data)和*((*pCurrPtr).m_Data):
pCurrPtr(指向a的指针CNode),m_Data成员变量(类型int),=>但m_Data不是指向一个指针int,它是一个int.这应该是你的编译器抱怨的.