读书人

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

发布时间: 2012-06-07 15:05:14 作者: rapoo

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

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

读书人网 >C语言

热点推荐