大牛哥,求破...

c用s户d昵n称 2012-12-21 11:20:16
#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:由于鄙人悟性较差,请各位大牛尽量解释的详细点,通俗易懂点,谢谢!
...全文
275 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
swlilike 2013-01-31
  • 打赏
  • 举报
回复
纠结这种问题的书,不看也罢, 等你会了再看这题,都会想当初纠结的自己,孽缘啊
snake_xiongyang 2012-12-21
  • 打赏
  • 举报
回复
如果这个代码不是教你什么叫做未定义行为的,那就是一本垃圾书
lee_鹿游原 2012-12-21
  • 打赏
  • 举报
回复
结果不是你想要的很正常.
无猫皆笼 2012-12-21
  • 打赏
  • 举报
回复
这是书上的题吧,只有书上才有这么不靠谱的题,不靠谱之处就是楼上几位说的f3函数的返回值问题,楼主不用纠结,实际中不会有这种代码的。
  • 打赏
  • 举报
回复
你这个确实很奇怪啊。。我单步调试到p=f3()的时候,是一个地址,然后调试*p显示的值是2,但是调试到*p+f1()的时候,*p就变成了1,但是p的地址还是先前那个。。
dhdahai 2012-12-21
  • 打赏
  • 举报
回复
函数f3有问题,返回了栈变量指针!
渔歌向晚 2012-12-21
  • 打赏
  • 举报
回复
哥们。我把你的代码 拷到 我的codeblock中 输出为3 啊!!! 究其原因在于你 f3函数有问题: 你定义的f3 函数 返回 一个局部变量的地址,但一个局部变量在生存域结束之后操作系统就会回收,所以不能保证里面的值不做改变,因此不能返回一个变量的引用或者指针。 如果你非得要返回一个指针,可用 malloc 或者 new。 但要记住 要在主函数里释放。 示例如下:
int f1()
 {
 int x;
 x=1;
 return x;
 }
 int *f3()
 {
 int *z = (int *)malloc(sizeof(int));
 *z=2;
 return z;
 }
     main()
 {
 int *p;
 p=f3();
 printf("res=%d",*p+f1());
 free(p);
 }
 

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧