答案是传值。传递给函数的是一个指针的复制品,将指针所指的地址copy一份传给函数。
先看一个错误例子
void create(treeLink *root){
root = newTreeNode(1);
}
void TreeLinkTest(){
treeLink *root = NULL;
create(root);
printf("\n root == null: %d\n",root == NULL);//返回为真
}
错误原因分析
指针传递的时候是值传递.所以create函数接收到的是指针的复制品NULL,create函数用一个新的指针指向了这个NULL.这时create里的指针和外面的指针已经完全不相干了. 所以当它修改复制品指针的指向当然无法传递出函数。
解决方法
前面分析了错误原因,现在就可以有针对性的处理问题了。
既然 create里的指针和外面的指针不相干,那便想办法让其相关即可,在传值的时候传递指针变量自身的地址即可。代码如下:
void create(treeLink **root){
*root = newTreeNode(1);
}
void TreeLinkTest(){
treeLink *root = NULL;
create(&root);
printf("\n root == null: %d\n",root == NULL);//返回为假
}