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

One-_-Piece 2013-07-17 03:10:35
函数如下:
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了呀
...全文
359 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_Day_Day_Up 2013-07-18
  • 打赏
  • 举报
回复
函数里的p指针只是形参,在函数里的所有修改只能改变形参的值,不会影响p指针的值,但是修改p指针所指向的内容,内容是能改变的
lin5161678 2013-07-18
  • 打赏
  • 举报
回复
就一句话 除了 引用传递 其他情况都不会改变实参的值 完毕 这里你的形参非引用 你的实参是p 这实参是不会被改变的
Qiong-k 2013-07-18
  • 打赏
  • 举报
回复
对于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;}
One-_-Piece 2013-07-18
  • 打赏
  • 举报
回复
肯定进入while循环了,函数里指针地址肯定也变了,这是指针传值的问题,没有了解吗?
One-_-Piece 2013-07-18
  • 打赏
  • 举报
回复
肯定进入while循环了,函数里指针地址肯定也变了,这是指针传值的问题,没有了解吗?
One-_-Piece 2013-07-18
  • 打赏
  • 举报
回复
肯定进入while循环了,函数里指针地址肯定也变了,这是指针传值的问题,没有了解吗?
ri_aje 2013-07-17
  • 打赏
  • 举报
回复
跟一下看看是不是确实进入 while 了。
z13451325357 2013-07-17
  • 打赏
  • 举报
回复
你赋值指针p,q指的同一个内容,都是7,p指针本身的地址不会改变
SKY0218 2013-07-17
  • 打赏
  • 举报
回复
LZ跟踪下代码就知道问题了...
max_min_ 2013-07-17
  • 打赏
  • 举报
回复
TreeNode* RB_Tree::TreeMinimun( TreeNode *x )  // 经过些函数x变了吗。。。
{
    if ( x == Nil )
    {
        cout << "ERROR" << endl;
        return Nil;
    }
    while ( x->lchild != Nil )
    {
        x = x->lchild;
    }
    //在这里加点打印信息看看,在函数体中 ,值和地址有没有改变
    return x;
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧