答案是传值。传递给函数的是一个指针的复制品,将指针所指的地址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);//返回为假
}
指针传值解析
本文通过一个具体的例子解释了在C/C++中如何正确地使用指针传递来修改外部变量的值。首先介绍了错误的做法及其原因,然后给出了正确的实现方式,并通过修改指针变量的地址来解决问题。

被折叠的 条评论
为什么被折叠?



