c语⾔函数参数地址传递参数,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 使⽤全局变量进⾏参数传递
在函数外部定义⼀个在函数内可见的变量,然后在函数内通过直接操作全局变量来达到传值的效果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论