C语言函数三种传递参数的方法

参数

实参(argument):
全称为"实际参数"是在调用时传递给函数的参数。是真实存在的数据。 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

形参(parameter):
全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

注:函数调用中发生的数据传递是单向的,只能实参→形参,而不能形参→实参。即,一旦完成数据的传递,实参和形参就再没关系了。所以,在函数调用过程中,形参的值发生改变并不会影响实参。

参数传递:

值传递、址传递、引用传递三种方法。

关于是否能通过传参改变实际数据的测试:

int test(int a,int *b,int &c) {
//依次是值传递、址传递、引用传递
	printf("当前传入参数a的值:%d\n",a);
	printf("当前传入参数b的值:%d\n",*b);
	printf("当前传入参数c的值:%d\n",c);
	a = 40;
	*b = 50;//需要注意!要用*b赋值
	c = 70;
	return a;
}
void main() {
	int a = 10,b = 20,c = 30;
	int d=test(a, &b,c);
	printf("返回a的值:%d\n",d);
	printf("打印出经过传参后a的值:%d\n",a);
	printf("打印出经过传参后b的值:%d\n",b);
	printf("打印出经过传参后c的值:%d\n",c);
}

结果为:

可以看到,值传递不能改变本身数据的值,只能通过return进行一个“数值结果”的传递,对参数本身不能产生影响。址传递与引用传递都能改变参数本身的取值。

区别:

传值:要建立参数的副本,用完再释放。效率低。任何的修改是在副本上作用,没有作用在原来的变量上。
传址:相当于建立指针变量的副本。原指针跟新副本指针都指向原数据,所做的操作也是对原数据进行修改。
传引用:相当于直接对指向的变量的操作,即对原数据的修改。(被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。)

用法:

指针传递和引用传递一般适用于:

1.函数内部修改参数并且希望改动影响调用者
2.当一个函数实际需要返回多个值,而只能显式返回一个值时,可以将另外需要返回的变量以指针/引用传递给函数,这样在函数内部修改并且返回后,调用者可以拿到被修改过后的变量。

注:引用传递实际上是C++中的用法。如果VS所含“&”的参数报错,将文件后缀改为cpp即可。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值