c语言函数间的参数传递

c语言是由若干个相对独立的函数组成,并且每个函数所完成的功能都不同,但是它们处理的数据有可能为同一批数据,所以在程序设计中就存在数据在函数间传递的问题。

1 函数调用时,实参的形式进行参数传递

1.1 函数调用的值传递
函数调用的值传递又称之为传值调用。传值调用时,实参可以是常量,可是是已经赋值的变量或表达式,甚至是另外一个函数,只要这个传入的实参是一个值,那么就可以作为实参进行传递,就可以对形参进行初始化。


传值调用的机制是系统将实参拷贝一个副本给形参,在函数调用时,系统才给形参分配内存空间,并将对应的实参值传递给形参,这样在内存空间中,就形成了一个被复制的实参副本。
在被调用函数内,形参的改变只影响副本中的参数值,而不影响调用函数中的实参值,故“传值调用”的特点 形参值不影响实际参数值。

函数调用的值传递常用于:函数不需要获取多个结果值,且参数是基本数据类型时,可以采用值传递的方式调用函数。

1.2 函数调用时采用地址传值
采用地址传值是将数据的存储地址作为函数的参数传递,而不是将数据本身传递给函数。
在这种形式中,以变量的地址作为参数调用一个函数,而被调用函数的形式参数必须是可以接受地址值的指针变量,并且它的数据类型必须与被传递数据的数据类型相同。这时,把变量的地址传递给被调用函数,被调用函数通过这个地址该变量的存储位置,直接对该存储位置中的变量的内容进行相关操作,通过这种方式被调用函数可以直接操作“传入参数的值”。
如果想让形参的改变影响实参,即函数返回时需要几个结果值,则应该采用地址传值的方式。
例:
#include “stdio.h”
void sum(float,float,float *); //函数申明
int main(){
float a1,a2;
float a1All;
printf(“请输入两个浮点数:\n”);
scanf(“%f,%f”,&a1,&a2);
sum(a1,a2,&a1All); //函数传值
printf(“%f +%f =%f\n”,a1,a2,a1All);

}

void sum(float _a1,float _a2,float *_a1All)
{
*_a1All = _a1+_a2;
return;
}


[root@localhost ~]#./t
请输入两个浮点数:
1.2,5.6
1.200000 +5.600000 =6.800000



2 使用返回值进行参数传递

函数被调用后可以向原函数返回一个值,返回值通过函数中的return 语句返回。
return语句在函数中的主要功能: 1 向调用函数返回一个结果值 2 把程序的控制从被调用函数返回值调用函数中。
使用return语句只能把一个返回值传递给调用函数。当要求返回的值多于一个时就不能采用return 返回值的方式,需采用函数调用时的地址传值方式。


3 使用全局变量进行参数传递

在函数外部定义一个在函数内可见的变量,然后在函数内通过直接操作全局变量来达到传值的效果。

相关阅读:
c语言程序结构–函数
c语言函数定义和调用