当我们想在函数中更改普通变量的值时,我们使用按引用调用来传递它。但是当我们必须使用引用调用传递指针变量(如二叉树的节点)时,我无法理解其中的复杂性。我知道如果我们想修改指针变量以指向另一个节点,我们必须使用引用调用。但是如果我们必须修改根的数据元素怎么办。我认为要更改它,我们也需要通过引用进行调用。但是下面的代码片段给出了 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;
}