関数内で通常の変数の値を変更したい場合は、参照による呼び出しを使用して渡します。しかし、refenceによる呼び出しを使用してポインター変数(バイナリツリーのノードなど)を渡さなければならない場合の複雑さを理解することはできません。別のノードを指すようにpoiter変数を変更する場合は、参照による呼び出しを使用する必要があることを理解しています。しかし、ルートのデータ要素を変更する必要がある場合はどうでしょうか。変更するには、参考までに電話が必要だと思いました。しかし、次のコードスニペットは、関数modifyTreeで値による呼び出しを使用してツリーのルートノードを渡したにもかかわらず、10、10、10の出力を提供しています。ここで何かが足りないのですか?
#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;
}