请c语言高手们赐教:什么时候应注意函数实参河和形参的单向传递问题

如题所述

第1个回答  2019-10-14
C语言中有两种传递方式,一个是值传递,另一个是地址(指针)传递。
值传递就是单向传递。它只给从
实参
传递给
形参
,而形参经过改变后不会传递给实参,对
函数
而言,就是
参数
经过主调用函数传递给了
被调用函数
,而我们知道,被调用函数除了用return
语句
返回一个值外,其余的值就不可以返回了。所以说值传递是单向传递。
地址传递则解决了值传递只能返回一个值的尴尬局面。地址传递通过把传入参数的地址以指针方式传递给形参,进而直接对传入参数的内在单元进行修改,所以,这种传递方式可以彻底改变传入参数,不受被调用函数只能返回一个值的限制。
由上面,所以,当你希望通过调用函数并返回多个数值时就要用地址传递的方式,其余就可以选用值传递了。
下面这道题采用值传递显然达不到设计者的要求。
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);
}
因为上面的
程序
采用了值传递,而传入的参数经f函数排大小后,不可能再传回去了,这就是单向传递。
希望,编写时候注意。

请c语言高手们赐教:什么时候应注意函数实参河和形参的单向传递问题
采用了值传递,而传入的参数经f函数排大小后,不可能再传回去了,这就是单向传递。希望,编写时候注意。

...指针为什么形参q1跟q2交换了,实参p1和p1也交换了,不是单向传递...
C语言的“单向传递”是指函数实参值传递给形参值,不能反过来传递。但是,在这个题目里,你把a和b的地址传递给swap函数的两个形参,因此调用swap(p1,p2);之后,swap的形参q1指向a,q2指向b,互换q1和q2所指向变量的值,自然会互换a和b的值。这中间没有涉及反过来(形参值传递给实参值)的传递方式,...

c语言函数实参向形参单向传递问题
因为你传的是数组!数组传的是地址,但是你修改的是地址上的值,所以值当然变了!

相似回答
大家正在搜