首页 新闻 会员 周边 捐助

cout输出指针p后,*p的值为什么会发生改变?

0
悬赏园豆:10 [已解决问题] 解决于 2019-04-21 14:47

源码和执行结果如下图:

问题:
为什么在cout << "A &p address : " << &p << endl;后,*p的值被修改了?

Brickert的主页 Brickert | 初学一级 | 园豆:193
提问于:2019-04-20 15:08
< >
分享
最佳答案
0

f()中将p指向了局部变量a,在函数返回后,a的空间就被回收了。在后面你调用的函数用到了原先a的栈空间,*p的值自然就变了。这种代码应该是什么书本里用来了解栈空间和堆空间的区别的吧。

收获园豆:10
一罪 | 菜鸟二级 |园豆:250 | 2019-04-20 17:47

谢谢!!
确实是这样。a是一个局部变量,&a在f()执行完后就被系统回收了。f()中ret = &a 这一步,使得p=&a,所以最后p输出不对。
正确写法应该是**ret = a; 代表*p = a,最后输出99,不会出现问题。

Brickert | 园豆:193 (初学一级) | 2019-04-21 14:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册