关于指针和指针的指针。请看例指教!

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:10:53
//查找
Node * find(int data)
{
Node * result=NULL;
f(pRoot,&result,data);
return result;
}
void f(Node * pn,Node ** result ,int data)
{
if(!pn) return;

if(pn->data==data)
{
*result=pn;
return;
}
else
{
f(pn->pLChild,result,data);
f(pn->pRChild,result,data);
}
}
这是我写的二叉树的查找方法。原本传递的result类型是 Node *,但每次地址都没有保存成功,下断点看了,保存后退出函数时result又变为空指针了。但这里改为Node ** 也就是指针的指针后为什么就可以了。这个课上老师提到过,但是不能理解,我碰到时也就是猜可能要用指针的指针,但我搞不懂到底怎么回事。希望能帮我好好理解,仅有的10分献上
我倒。。。指针我懂,问题是我说的指针的指针!!!!!!!

在调用函数的时候,系统会把实参复制到堆栈,你在函数 f 里对result赋值,实际上是对堆栈里的那个变量赋值的,如果想改变实参的值,那你就必须把它的指针传递到函数里。下面是一个简单的例子:

void swap(int a, int b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void swap(int*a, int* b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
你可以试试这连个函数的区别。