C语言形参实参

来源:百度知道 编辑:UC知道 时间:2024/05/25 12:16:39
下列给定程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int fun(int *x,int y)
{
int t;
t=*x;*x=y;
return(y);
}
void main()
{int a=3,b=8;
system("CLS");
printf("%d %d\n ",a,b);
b=fun(&a,b);
printf("%d %d\n ",a,b);
}

我的理解是,函数返回的是b的值(此时它等于原来的a的值),哪a的返回值在哪里体现?那个t=*x有什么用?
我做的题目中有很多是某某某通过形参返回,现在有点糊涂了。

你的程序一定错误,函数fun中应该是return t;就对了

t=*x就是先把原来a的值保存起来,然后通过指针的方法把b赋值给a,然后把t返回给b
就相当于a和b的交换了,一个是通过地址赋值,一个是通过返回值赋值

int fun(int *x,int y)
{
int t;
t=*x;*x=y; //这里是不是少了一句y = t;?
return(y); //或者这里是return (t)?
}

C的函数参数都是单向值传递,因此,普通参数是无法通过传入参数达到修改值的目的,也就是说,函数以一般的值传递方式是无法达到通过形参返回所需值的。但可以向函数传递地址来达到这个目的。向函数传递一个地址,通过地址来操作改地址的值。

以本函数为例,b是一个实参,它顶替了形参y,并且通过return将其值返回,这就是一个普通的单向值传递。

而另一个实参是&a,即a的地址,它顶替了形参x,在函数fun内部,通过解参考运算符*操作&a内所保存的值(即a),也就是说,当函数结束时,a的值已经被函数fun所修改。这就是所谓的地址传递,通过间接操作来达到以形参返回的目的。

PS:多说一句,实际上所谓的地址传递依然是单向值传递,只不过改值是一个地址,再通过地址来操作需要操作的值。

这里三言两语恐怕也难以说的十分清楚,具体可以看C语言基础教程关于函数和指针的介绍。