oops英语怎么读:谁会c语言,看看这道题

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 18:17:55
?(29) 有以下程序
??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
??A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,1
答案是c,我怎么觉得是a呢?

答案是c
这是在按值传递。

下面的是按地址传递,答案是1,2,3。
#include<stdio.h>
void f(int *v,int *w)
{
int t=*v;
*v=*w;
*w=t;
}
void 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);
}

if(x>y) f(y,z); 不成立!
执行else if(y>z) f(y,z); Y=3,Z=2;可得C答案

你这个函数传的是值,也就是原来x、y、z值的一个拷贝进去,对原来的x、y、z的值是不会有影响的

其实我以前也对这个问题感到疑惑.
要知道,这可以认为是C语言的特殊规定.
在C语言中,实参向形参的数据是单向的值传递.也就是只由实参传给形参,而不会传回来.
你只是把实参的值传给了形参,然后根据情况对形参的值进行调换.但是调换完后并未对实参有影响,所以它不会变的.
如果你学的是谭教授的课本,你应该没有学到指针吧.
当学到指针后还会对此讨论.如果你把地址作为参数传给形参,那么它就会变化,也就是会保留这样参数有变化.
学到你就会懂的

这关系到函数的单值传递问题,即函数无法改变实参的值。各个变量都有自己的作用域。

else if(y>z) f(y,z);
?? else f(x,z);
这里有问题;意思是如果y>z的话,y与z的值互换,否则的话(就是y<z的话)x与z的值互换(并不是说x<z的话,x与z互换值).楼主理解时没有看清楚语法.