大牛哥,求破...
#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函数的返回值问题,楼主不用纠结,实际中不会有这种代码的。
[解决办法]
结果不是你想要的很正常.
[解决办法]
如果这个代码不是教你什么叫做未定义行为的,那就是一本垃圾书