C++结构属性可以在函数内更改,但在函数范围外保持不变



我正在处理一个自我强加的挑战,该挑战涉及实现一个链表和一个附加函数,这给我带来了似乎与变量范围有关的问题。

append函数循环遍历每个链接元素,直到它读取NULL值,然后将与该链接相关联的数据值更改为函数输入。函数内的测试输出似乎表明它按预期工作,但当在函数外执行相同的测试时,即使在调用后也会给出不同的输出。

template <class T>
struct atom{
T data;
atom<T>* link = NULL;
};
template <class T>
void append_LL(atom<T> first, T input_data){
atom<T>* current_node = &first;
atom<T>* next_node = current_node->link;
int i = 0;
while (i < 4 && next_node != NULL) {
current_node = next_node;
next_node = next_node->link;
i ++;
}
current_node->data = input_data;
current_node->link = (atom<T>*)malloc(sizeof(atom<T>));
cout << "leaving node as: " << current_node->data << endl; //outputs 5
cout << "input nodes data: " << first.data << endl;        //outputs 5
}
int main() {
int dd = 5;
atom<int> linked_list;
linked_list.data = 999;
append_LL(linked_list, dd);
cout << linked_list.data << endl; //outputs 999
}

因为您没有发送相同的atom。您可以看到程序正在main函数中制作linked_list的副本,并将该副本发送到该函数。

如果您想修改相同的linked_list,则更改

void append_LL(atom<T> first, T input_data){

void append_LL(atom<T> &first, T input_data){

这样你发送的是真正的atom,而不是它的副本

最新更新