void fun(intx,inty,intz) {printf("fun-in:%d,%d,%d\n",x,y,z); y=x+5; z=x+y;x=z-y;

printf("fun-end:%d,%d,%d\n",x,y,z);
}
main()
{int x=10,y=20,z=30;
fun(z,y,x) printf("%d%d%d\n",x,y,z);
} 这道题怎么做啊,求帮助

函数fun的参数

(int x,int y,int z) 

都是传值调用. 不管fun中怎么修改, 不影响主函数值. 

调用的时候, 注意顺序, 对于fun x=30 y=20 z=10. 和主函数的xyz是不一样的. 

先输出fun-in

fun-in:30,20,10

然后 

y=x+5;  y=35

z=x+y; z=30+35=65

x=z-y;  x=65-35=30

输出

fun-end:30,35,65

回到主函数, xyz还是初始值, 输出

102030
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-23
显示结果为:
fun-in:30,20,10
fun-end:30,35,65
102030

fun函数根据传值来得到他内部标识符x,y,z的值,实际传给fun中x的值是main函数中z变量的值30,传给fun中y的值是main函数中y的值20,传给fun中z的值是mian函数中x的值10,在fun函数中x=30,y=20,z=10,以此进行printf输出,然后执行y=x+5;z=x+y;x=z-y;这些运算都只是改变fun中参数x,y,z的值,这些值是函数调用时在栈空间新分配了存储空间,修改的也是新分配空间的存储值(这里可以看成是fun的零时变量)。
调用执行完fun函数之后,main函数中x,y,z的值不变,x还是10,y为20,在等于30,以此再次输出。
第2个回答  2012-07-23
void fun(int x,int y,int z) // x = 30, y = 20, z = 10
{
printf("fun-in:%d,%d,%d\n",x,y,z); // 输出 fun-in:30,20,10
y=x+5; // y = x + 5 = 35
z=x+y; // z = x + y = 30 + 35 = 65
x=z-y; // x = z - y = 65 - 35 = 30;
printf("fun-end:%d,%d,%d\n",x,y,z); // 输出 fun-end:30,35,65
}
main()
{
int x=10,y=20,z=30;
fun(z,y,x); // 调用fun, 参数顺序为 z y x
printf("%d%d%d\n",x,y,z); // 因为函数修改的是形参,所以main中数据不变。输出 102030
}追问

再请教一下,第一个为什么改变?

追答

fun里面的参数是形参,在fun里面可以修改,但是修改不影响传入的原来的参数的值

本回答被提问者采纳
第3个回答  2012-07-23
fun-in:30,20,10
fun-end:30,35,65
102030
第4个回答  2012-07-23
30 20 10
10 20 30

void fun(intx,inty,intz) {printf("fun-in:%d,%d,%d\\n",x,y,z...
(int x,int y,int z)都是传值调用. 不管fun中怎么修改, 不影响主函数值.调用的时候, 注意顺序, 对于fun x=30 y=20 z=10. 和主函数的xyz是不一样的.先输出fun-in fun-in:30,20,10然后 y=x+5; y=35 z=x+y; z=30+35=65 x=z-y; x=65-35=30 输出 fun-end:30,35,65...

相似回答