关于栈的一个小震惊 求大牛解答
- C/C++ code
#include<stdio.h>#include<stdlib.h> int* plus(int &a,int &b){ int c; c = a+b;// printf("%x\n",&c); return &c;}int main(){ int *p=NULL; int a = 4; int b = 15; p = plus(a,b);// printf("%x\n",p); printf("%d\n",*p); system("pause"); return 0;}
知道输出什么吗 居然是19
惊奇吗 颠覆了吧
还有更惊奇的把反注释在试试 很有趣对
vs2010 求其他编译器答案和大牛解答
[解决办法]
[解决办法]
函数调用函数的活动过程记录实在堆栈里的,你要是只是调用一次这个函数,值当然没有变动,也就是地址不变。不过要是再调用一个函数的话,地址就不是原来的那个变量的了,在顶部的将是刚调用的函数
[解决办法]
这个有啥震惊的,你碰巧在函数调用后没有破坏原来的栈的数据而已,你有本事在
p = plus(a,b);
这里加个其他的函数调用
printf("%d\n",*p);
system("pause");
你就不震惊了。