c语言中,为什麽省去return (z)对结果没影响?

int max(int x,int y)
{
int z;
z=x+y;
return(z);
}

#include <stdio.h>
int main()
{
int max(int x,int y);
int a,b,c;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
c=max(a,b);
printf("最大值为%d\n",c);
return(0);
}

这是一个比较深一点的问题,跟编译器有关
return z;是将z的复制一份放到一个临时空间里面
省略return(z);时 因为Z是一个局部变量,当函数结束时Z被释放,但Z所在内存原来的地址中得值其实并没有改变。这个值存在这个程序的堆中,而编译器正是从堆中取出一个值给了C,这里C正好取到了已经释放了的Z的值。

省略return(z);
并不是总对结果没影响的,所以建议别这样写程序
检查严格的编译器是不会让你编译通过的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
#include "stdio.h"
int max(int x,int y)
{
int z,j,k,l;
z=y+x;
j=x+x;
k=x*y*y;
l=x+x*y;
}

int main()
{
int max(int x,int y);
int a,b,c;
scanf("%d%d",&a,&b);
c=max(a,b);
printf("%d\n",c);
return(0);
}
你试一下这个程序,我猜想是默认返回最后一个对参数进行运算的表达式的值(自增长之类除外),不知道是否正确,因为我只能根据测试结果猜。 你可以把max函数里的表达式调换顺序或者修改来测试一下本回答被提问者采纳
第2个回答  2011-12-02
貌似return 后面离不了(),你不觉得烦吗? 可以去掉的
还有给你一个建议以后函数名一定要和其功能一致。
去掉了return Z后还能运行我只能说你运气好
还有max函数在main()之前不必声明
第3个回答  2011-12-01
#include <stdio.h>应该放最上边吧
<stdio.h>是不是有max这个函数
再说函数也不对啊,那哪是取最大值啊
相似回答