c程序高手进:两个输出函数为什么值不同,详细说明解释,多谢。

c程序如下:
#include<stdio.h>
void main ()
{
int a,b,*maxp,max;
int *maxf(int,int);
scanf("%d%d",&a,&b);
maxp=maxf(a,b);
printf("max=%d",*maxp);
printf("max=%d",*maxp);
printf("max=%d",*maxp);

}
int *maxf(int c,int d)
{
int z;
z=c>d ? c:d;
return(&z);

}
输出结果为:max=9max=1我已经知道函数是局部变量有问题,想高手解释下两个输出函数为何不一样,如果继续输出还是1,谁能清楚的解释一下,解释清楚再追加30悬赏。

这个问题 我暂时解决不了,必定 返回一个即将销毁的值相当于自杀的行为,
相信程序员都不会这么做。
局部变量 z在函数maxf执行完后会被清栈,这是一定的, 所以第二次跟第三次打印都是一个随即的“脏值”,这是正常的。

但是第一次打印居然能够成功,这个我就不理解了,扫一下这个程序本来以为三次打印都是一个“脏值”呢。

现在我只能理解为 系统清栈是有一定时间的,打印第一次时还没到清栈的时机。我暂时是这么理解的。

这个如果作为编码来讲,是垃圾的不能再垃圾的代码;
但是如果作为深入了解编译原理,和c/c++的底层机制来讲是很不错的。

我跟公司逆向汇编的同时交流了一下,他也不知道是否为cpu时间片分配的问题所致。

反正就是这样告诉你, 不要返回局部变量的地址, 可以直接申请堆空间
温馨提示:答案为网友推荐,仅供参考
相似回答