gpt4 book ai didi

处理二叉树时按值调用与按引用调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:09 25 4
gpt4 key购买 nike

当我们想在一个函数中改变一个普通变量的值时,我们使用引用调用来传递它。但是当我们必须使用引用调用传递指针变量(如二叉树的节点)时,我无法理解其中的复杂性。我知道如果我们想修改 poiter 变量以指向另一个节点,我们必须使用引用调用。但是如果我们必须修改根的数据元素怎么办。我认为要改变它我们也需要通过引用调用。但是下面的代码片段给出了 10、10、10 的输出,即使我已经在函数 modifyTree 中使用按值调用传递了树的根节点。我在这里遗漏了什么吗?

#include<stdio.h>
#include<stdlib.h>


struct node
{
int data;
struct node* left;
struct node* right;
};

/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newNode(int data)
{
struct node* node = (struct node*)malloc(sizeof(struct node));

node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}

/* This function sets the data fields of some of the nodes of tree to 10*/
void modifyTree(struct node* node)
{

node->data = 10;
node->left->data = 10;
node->right->data = 10;
}

int main()
{
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);

modifyTree(root);

printf("%d\n", root->data);
printf("%d\n", root->left->data);
printf("%d\n", root->right->data);

getchar();
return 0;
}

最佳答案

按值传递指针意味着被调用函数接收与调用者使用的完全相同的指针值,因此通过该指针的任何访问都将引用同一内存。

如果您希望函数修改调用者拥有的指针(例如,通过分配一个新树,从而“创建”一个新指针值),您将需要一个双指针。 p>

关于处理二叉树时按值调用与按引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com