函数指针传值,指针地址和内容都没变??
函数如下:
TreeNode* RB_Tree::TreeMinimun( TreeNode *x ) // 经过些函数x变了吗。。。
{
if ( x == Nil )
{
cout << "ERROR" << endl;
return Nil;
}
while ( x->lchild != Nil )
{
x = x->lchild;
}
return x;
}
调用如下(注释部分为什么没有变化?):
TreeNode *p = rb.TreeSearch( 7 );
cout << p->key << endl; // 输出 7
cout << p << endl; // 输出 00221A18
TreeNode *q = rb.TreeMinimun( p );
cout << q->key << endl;
cout << p->key << endl; // 输出 7
cout << p << endl; // 输出 00221A18
由于全部代码太多,没有全列出;
为什么注释部分输出一样,函数里确实改变p了呀
[解决办法]
对于X的改变,传入的 *X 是传值,传的是指针值
对于*X的改变,传入 *X是传地址
所以你其实还是传值操作
应该这样:
TreeNode* RB_Tree::TreeMinimun( TreeNode **x ) // 经过些函数x变了吗。。。{ if ( *x == Nil ) { cout << "ERROR" << endl; return Nil; } while ( (*x)->lchild != Nil ) { *x = (*x)->lchild; } //在这里加点打印信息看看,在函数体中 ,值和地址有没有改变 return *x;}[解决办法]
函数里的p指针只是形参,在函数里的所有修改只能改变形参的值,不会影响p指针的值,但是修改p指针所指向的内容,内容是能改变的