码迷,mamicode.com
首页 > 其他好文 > 详细

指针之尚未学到家

时间:2014-06-08 22:17:35      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

前日写了个二叉树插入节点的操作,是一个递归函数。在遍历树时发现并没有插入到树中。这可就纳了闷,单步跟踪发现了令我感到奇怪事情,为什么插入函数的参数是指针,而且被改变了,但函数外部为改变呢。请教高人之后豁然开朗。。。

对于c语言的指针,初学者有诸多困惑,虽不至于令人害怕,但使用不当,会使程序出错或埋下隐患。现在看一下将指针作为函数参数的情况:

bubuko.com,布布扣
int a=2;
int b=7;
void change_a(int *x){
    *x=3;
}
change_a(&a);
printf(
"%d ",a);
bubuko.com,布布扣

上面的代码应当输出3,但若change_a函数变为如下:

void change_a(int* a){
    a=&b;
}

并不能够改变a的值,原因很简单,因为函数参数的传递都是值的传递,也就是值的复制,包括指针(指针占用空间的大小与int相当)。所以我们要向改变某些内存空间的值就要直接对该内存进行赋值。因为*号为寻址(解引用)操作*a=3即改变了内存中的值。在c++中引用是个行之有效的方式。

在树和链表等数据结构中常用到指针的操作,如果没意识到这一点或忘记这一点那就太糟糕了。

 

指针之尚未学到家,布布扣,bubuko.com

指针之尚未学到家

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/makefile/p/3775537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!