离开函数后值消失
Values vanishing after leaving function
我正在编写一个函数来插入到树中,在函数中插入后可以看到(打印)数据,但是当试图在 main 中看到它时没有任何反应。
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);
}
}
这给出:
inner: 4321
应该是:
inner: 4321
outer: 4321
问题是,tree
作为参数传递给函数,而 by-status 在 C 中是 pass-by-value。对 tree
本身所做的任何更改函数内部不会反射回调用者。
如果你想从被调用函数修改tree
,你需要传递一个指向tree
的指针。
类似
void insert(node** tree, int data) {
if (*tree == NULL) {
*tree = new_node(data);
printf("inner: %d\n", (*tree)->data);
}
}
并这样称呼它
insert(&tree, 4321);
你将树初始化为一个指针
node *tree = NULL;
这意味着,变量的内容是存储树的内存位置。
当您将该内存位置传递给函数时,它的值将被复制到函数内的局部变量。
当你打电话时
tree = new_node(data);
您正在做的是为函数内 tree
指针的局部变量分配一个新的内存位置。函数外部的指针仍然具有相同的值并指向没有节点的内存位置。
要在函数内编辑节点,您需要做的是为节点定义某种 setter,或者使用 [=13] 显式设置数据 属性 =].这将改变 tree
指向的内存内容,而不是改变其内存位置。
我正在编写一个函数来插入到树中,在函数中插入后可以看到(打印)数据,但是当试图在 main 中看到它时没有任何反应。
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);
}
}
这给出:
inner: 4321
应该是:
inner: 4321
outer: 4321
问题是,tree
作为参数传递给函数,而 by-status 在 C 中是 pass-by-value。对 tree
本身所做的任何更改函数内部不会反射回调用者。
如果你想从被调用函数修改tree
,你需要传递一个指向tree
的指针。
类似
void insert(node** tree, int data) {
if (*tree == NULL) {
*tree = new_node(data);
printf("inner: %d\n", (*tree)->data);
}
}
并这样称呼它
insert(&tree, 4321);
你将树初始化为一个指针
node *tree = NULL;
这意味着,变量的内容是存储树的内存位置。
当您将该内存位置传递给函数时,它的值将被复制到函数内的局部变量。
当你打电话时
tree = new_node(data);
您正在做的是为函数内 tree
指针的局部变量分配一个新的内存位置。函数外部的指针仍然具有相同的值并指向没有节点的内存位置。
要在函数内编辑节点,您需要做的是为节点定义某种 setter,或者使用 [=13] 显式设置数据 属性 =].这将改变 tree
指向的内存内容,而不是改变其内存位置。