返回信息流指针变量做函数参数时,是怎么改变了实参的值的?
形参值不能传回实参,为何用指针指向一下就可以改变了?晕眩中……
如下代码,怎么就把a的值改变了?
int change( int *a ){
*a = 100;
}
int main(){
int change( int *a );
int *p;
int a = 1;
p = &a;
change( p );
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #89401同步于 2015/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]陷入C的指针问题不能自拔……求轻拍
pointless
2015/11/8镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
每个变量有一个“存储空间”,指针是对这个存储空间的引用。把a引用给change函数,change函数把a里面的值改了,然后main再读a,就读到新的值。就是这样。
【 在 nuanyangyang 的大作中提到: 】
: 每个变量有一个“存储空间”,指针是对这个存储空间的引用。把a引用给change函数,change函数把a里面的值改了,然后main再读a,就读到新的值。就是这样。
中午想了一下 调用函数是实参到形参的单向值传递 所以调用函数时只能通过指针改变变量值
【 在 fuxuemingzhu 的大作中提到: 】
: id好评。
: 直接把内存数给改了。可以稍微看下汇编。
不太懂……你说的意思
内存数就是指把原地址上的变量改了?
【 在 pointless 的大作中提到: 】
:
: 中午想了一下 调用函数是实参到形参的单向值传递 所以调用函数时只能通过指针改变变量值
是的。起码C语言是这样的。
【 在 nuanyangyang 的大作中提到: 】
:
: 是的。起码C语言是这样的。
主函数中的变量的地址是不是可以看做是它的私有属性,一旦创立变量,其地址便不会改变。
【 在 pointless 的大作中提到: 】
: 主函数中的变量的地址是不是可以看做是它的私有属性,一旦创立变量,其地址便不会改变。
是的。C语言里,“变量”和它的存储空间从一开始就是绑定的。
事实上C语言里没有“变量”这个概念。int a;的意思是:创建一个int型的存储空间,内容可变(因为没有const),它的标识符是a。
而且C语言里也没有“地址”的概念。指针是存储空间的引用。所以,如果指针值指向一个存储空间,他就永远指向那个存储空间。