Fra*_*ton 1 c pointers pass-by-value
我正在编写一个要插入到树中的函数,插入函数后可以看到(打印)数据,但是当尝试在主目录中查看它时,什么也没发生。
node *tree = NULL;
insert(tree, 4321);
printf("outer: %d\n", tree->data);
void insert(node* tree, int data) {
if (tree == NULL) {
tree = new_node(data);
printf("inner: %d\n", tree->data);
}
}
Run Code Online (Sandbox Code Playgroud)
这给出:
inner: 4321
Run Code Online (Sandbox Code Playgroud)
它应该是:
inner: 4321
outer: 4321
Run Code Online (Sandbox Code Playgroud)
问题是,tree作为参数传递给函数,并且按状态是C中的按值传递。tree在函数内部对其自身所做的任何更改都不会反映回调用方。
tree如果tree要从调用的函数进行修改,则需要传递一个指向的指针。
就像是
void insert(node** tree, int data) {
if (*tree == NULL) {
*tree = new_node(data);
printf("inner: %d\n", (*tree)->data);
}
}
Run Code Online (Sandbox Code Playgroud)
并称它为
insert(&tree, 4321);
Run Code Online (Sandbox Code Playgroud)