首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于栈的一个小震惊 求大牛解答,该怎么处理

2012-06-07 
关于栈的一个小震惊 求大牛解答C/C++ code#includestdio.h#includestdlib.h int* plus(int &a,int &b)

关于栈的一个小震惊 求大牛解答

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");
你就不震惊了。

热点排行