指针改变它指向的地址的值
The pointer changes the value of the address it points to
我希望 pFirst
始终指向地址中的同一位置。然而,看起来 pFirst
与 pCurrent
一起移动,即使该函数仅进入 Else 语句一次。
注意:代码正在创建链表。
void Push(T data) {
++_size;
Data d = Data(data);
if (_pCurrent != nullptr) _pCurrent->SetNext(&d);
else _pFirst = &d;
_pCurrent = &d;
}
d
是在本地创建的,所以函数结束后就不存在了。调试错误有点奇怪,因为程序在同一个地址初始化了一个新元素,所以我没有立即明白到底发生了什么。
这是工作版本:
无效推送(const T 数据){
Data*d = new Data(data);
++_size;
if (_pCurrent != nullptr)
_pCurrent->_pNext = d;
else
_pFirst = d;
_pCurrent = d;
}
数据应该是一个静态变量。代码应该是这样的:
Data d;
void UpdateData(Data newData) {
//Do something on d using newData;
}
void Push(T data) {
++_size;
UpdateData(data);
if (_pCurrent != nullptr)
_pCurrent->_pNext = d;
else
_pFirst = d;
_pCurrent = d;
}
我希望 pFirst
始终指向地址中的同一位置。然而,看起来 pFirst
与 pCurrent
一起移动,即使该函数仅进入 Else 语句一次。
注意:代码正在创建链表。
void Push(T data) {
++_size;
Data d = Data(data);
if (_pCurrent != nullptr) _pCurrent->SetNext(&d);
else _pFirst = &d;
_pCurrent = &d;
}
d
是在本地创建的,所以函数结束后就不存在了。调试错误有点奇怪,因为程序在同一个地址初始化了一个新元素,所以我没有立即明白到底发生了什么。
这是工作版本:
无效推送(const T 数据){
Data*d = new Data(data);
++_size;
if (_pCurrent != nullptr)
_pCurrent->_pNext = d;
else
_pFirst = d;
_pCurrent = d;
}
数据应该是一个静态变量。代码应该是这样的:
Data d;
void UpdateData(Data newData) {
//Do something on d using newData;
}
void Push(T data) {
++_size;
UpdateData(data);
if (_pCurrent != nullptr)
_pCurrent->_pNext = d;
else
_pFirst = d;
_pCurrent = d;
}