首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数指针传值,指针地址跟内容都没变?

2013-08-04 
函数指针传值,指针地址和内容都没变??函数如下:TreeNode* RB_Tree::TreeMinimun( TreeNode *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;
}

调用如下(注释部分为什么没有变化?):
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指针所指向的内容,内容是能改变的

热点排行