fun(int x,int y,int z){z=x*x+y*y;}main(){int a=31;fun(5,2,a);printf("%d",a);} 改了原题但还是有问题

原题是#include<stdio.h>
void fun(int x,int y,int z)
{
z=x*x+y*y;
}
int main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
return 0;
}

有人说是因为是void,没有返回值,所以a算出来还是31而不是29.

我改了下
#include<stdio.h>
int fun(int x,int y,int z)
{
z=x*x+y*y;
return z;
}
int main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
return 0;
}
但是还是得到31.
既然fun有返回值了,为啥a还是等于31而不是29呢?
求解释,感激不尽!

这个主要是形参与实参的关系 。
在函数的参数列表里的,是形参,它是对实参的一个拷贝, 但是它们不是在内在同一个块。所以对形参的改变不会影响实参的值 。

c++可以通过引用,也就是别名来改变, 比如把函数定义成 void fun(int,int,int &)
这样在函数里,对第三个参数做改变,相应的实参也会改变,因为它们是同一个。 这就是引用类型的作用。

也可以通过指针所指来修改地址值 也就是 void fun (int ,int int * )
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-17
原因是fun(5,2,a)中a是做的形参,形参的改变并不改变实参的值。要想让结果为29 ,就使用指针吧
第2个回答  2013-09-17
把 fun(5,2,a);改为 fun(5,2,&a);int fun(int x,int y,int z)改为int fun(int x,int y,int *z)试一下。

fun(int x,int y,int z){ z=x*x+y*y;}main( ){ int a=31;fun(5,2,a...
输出31 fun函数为值传递,不改变a的值

fun(int x,int y,int z){z=x*x+y*y;}main(){int a=31;fun(5,2,a);p...
也可以通过指针所指来修改地址值 也就是 void fun (int ,int int * )

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...

...=x-y; printf("%d,%d,",x,y); } main() {int x=2,y=3; fun(x,y...
main是主函数,所以程序先从main函数执行。main函数中,调用fun(x,y);x,y是形参,值分别为2,3.转入执行fun()函数,x,y被重新赋值了,x=2+3=5,y=5-3=2,x=5-2=3 接着输出xy的值,所以为3,2。因为x,y不是地址传递,所以在main函数中的x,y没有变化 所以main函数中输出的值为...

c语言fun(int x,int y)
如 int fun(int x,int y) \/\/即fun函数是个执行两个int型数据加法运算的动作 { return x+y;} void main(){ cout<<fun(1,19)<<endl;\/\/用1和19这两个int型的数据来执行这个fun的加法运算 }

C语言 请问下面程序中,fun是什么意思
3,a这三个参数分别传给x,y,z 求出z的值后返回z的值,也可以这样写 fun (int x, int y, int z){ z=x * x + y * y;return z;} main(){ int a=38;fun(7,3,a);printf(“%d”,a);} fun 是自定义的一个函数名,没有设么特别的意思,你也可以把他定义成其他的名称 ...

...=x-y; printf("%d,%d,",x,y); } main() {int x=2,y=3; fun(x,y...
void fun(int x,int y)\/\/ 由于这里传入参数不是指针,引用,所以这里x,y只是main函数中x,y值的一个拷贝,所以修改后不会对main中x,y的值有影响。{x=x+y;y=x-y;x=x-y;printf("%d,%d,",x,y);} \/\/ 这里输出:3,2,main(){ int x=2,y=3;fun(x,y);\/ printf("%d,%d\\n"...

...fun(int x,int y); {int z; z=x+y; return z;}B.fun(int x,y_百 ...
选C.AB返回值和函数定义不一致,D的int x,y定义不能在fun()和{}中间

大家考试小心陷阱!
不是没用到,这个fun函数确实是返回了个值29.。。。不过由于函数调用采用的值传递方式,所以变量a的值是31。。。如果函数变为fun(int x,int y,int &z)结果就是29

C语言大师帮忙,在线等
int k=0 while(k=1)k++;while 循环执行的次数是 A A) 无限次 B) 有语法错,不能执行 C) 一次也不执行 D) 执行1次 15、以下程序的输出结果是 fun(int x, int y, int z){ z=x*x+y*y; } main(){ int a=31;fun(5,2,a);printf(“%d”,a); C } A) 0 B) 29 ...

相似回答