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

大牛哥,求立.

2013-01-08 
大牛哥,求破...#include stdio.hint f1(){int xx1return x}int *f3(){int zz2return &z}main(){

大牛哥,求破...
#include <stdio.h>
int f1()
{
int x;
x=1;
return x;
}
int *f3()
{
int z;
z=2;
return &z;
}
    main()
{
int *p;
p=f3();
printf("res=%d",*P+f1());
}
为什么这程序的结果是2 不是3?
PS:由于鄙人悟性较差,请各位大牛尽量解释的详细点,通俗易懂点,谢谢!
[解决办法]
哥们。我把你的代码 拷到 我的codeblock中 输出为3 啊!!! 

究其原因在于你 f3函数有问题:
     你定义的f3 函数 返回 一个局部变量的地址,但一个局部变量在生存域结束之后操作系统就会回收,所以不能保证里面的值不做改变,因此不能返回一个变量的引用或者指针。
     如果你非得要返回一个指针,可用 malloc 或者 new。 但要记住 要在主函数里释放。

示例如下:


[解决办法]
你这个确实很奇怪啊。。我单步调试到p=f3()的时候,是一个地址,然后调试*p显示的值是2,但是调试到*p+f1()的时候,*p就变成了1,但是p的地址还是先前那个。。
[解决办法]
这是书上的题吧,只有书上才有这么不靠谱的题,不靠谱之处就是楼上几位说的f3函数的返回值问题,楼主不用纠结,实际中不会有这种代码的。
[解决办法]
结果不是你想要的很正常. 
[解决办法]
如果这个代码不是教你什么叫做未定义行为的,那就是一本垃圾书

热点排行