在写查找树排序的代码时,遇到了根指针传值的问题。
添加一个结点的函数签名如下:
struct node * tree_insert(struct node **root ,int key);
向该函数传递树根指针,并且希望能够修改树根指针的指向,所以传递树根指针的地址。在该函数中使用一个二级指针(同为root)来保存指针树根的地址。
当向树中添加第一个结点时,需要修改树根指针的指向。在该函数中添加的新结点为ret,所以修改的语句应该为:
*root=ret;
而不是:
root=&ret;
后者修改了root的指向,此时*root不再指向树根指针;而前者则是修改树根指针的指向,使得树根指针指向新的树根ret。
所以在编写C代码时,应特别注意指针的真实指向。并且,还应该清楚指针传参也属于值传递。