离开功能后价值消失

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)

Sou*_*osh 8

问题是,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)