源码和执行结果如下图:
问题: 为什么在cout << "A &p address : " << &p << endl;后,*p的值被修改了?
在f()中将p指向了局部变量a,在函数返回后,a的空间就被回收了。在后面你调用的函数用到了原先a的栈空间,*p的值自然就变了。这种代码应该是什么书本里用来了解栈空间和堆空间的区别的吧。
f()
p
a
*p
谢谢!! 确实是这样。a是一个局部变量,&a在f()执行完后就被系统回收了。f()中ret = &a 这一步,使得p=&a,所以最后p输出不对。 正确写法应该是**ret = a; 代表*p = a,最后输出99,不会出现问题。