c语言的函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 05:26:17
有以下程序
void f(int v , int w)
{ int t;
t=v;v=w;w=t;
}
main( )
{ int x=1,y=3,z=2;
if(x>y) f(x,y);
else if(y>z) f(y,z);
else f(x,z);
printf(“%d,%d,%d\n”,x,y,z);
}
执行后输出结果是
A) 1,2,3
B) 3,1,2
C) 1,3,2
D) 2,3,1

我选的A,可答案是C,高手帮忙解释一下,谢谢了

void f(int *v , int *w)
{ int t;
t=*v;*v=*w;*w=t;
}
main( )
{ int x=1,y=3,z=2;
if(x>y) f(x,y);
else if(y>z) f(&y,&z);
else f(x,z);
printf(“%d,%d,%d\n”,x,y,z);
}
程序如果写成这样,你选的就是正确的了,好好看看两个程序的区别:
参数传递为:值传递(原题),不改变原来变量的值
地址传递(修改后),将改变原来变量的值
c++中还有一个:引用传递如下,效果和地址传递一样
void f(int &v , int &w)
{ int t;
t=v;v=w;w=t;
}

C的函数只有一种传值方式,就是pass by value,在调用f(y,z)的时候只是把y和z的值传进去操作,并不会改变y和z本身的值,需要把y和z的地址的值传进去,才会改变y和z的内容

因为f(x,y)的参数是形参不是实参,传过去的地址后没有对地址上的数进行修改.所以是原封不动.

形参不会引起实参变化

子函数 少 return

所以 只能是 实参 把值 传给 了 行参

而不能由 行参 把 运算后的 结果 数值 传给 实参

形参是变了,但实参没有变;调用f(y,z)的时候只是把y和z的值传进去,应该传他们的地址才选C