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

C++ Struct attributes can change within function, but remain unchanged outside scope of function

我正在应对一项自我挑战,其中涉及实现一个 linked 列表和一个追加函数,这给我带来了看似与变量范围相关的问题。

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

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 而不是它的副本。