C语言函数传递与值传递

    C语言提供了两种参数传值机制:一种是值传递,就是将实参的值赋值给形参,换句话说,形参是实参的一份拷贝,因此函数对形参的改变并不影响实参;另一种是参数传递,是一种地址传递,是指将实参的地址赋值给形参,即形参和实参指向同一块内存空间,因此函数对形参对象的处理就是对实参的处理。C语言中实现地址传递的方法一般是将形参指定为指针类型。

    为了提高数组的传递效率,C语言中数组作为函数参数传递时实际传递的是数组在内存空间的首地址,不再为函数的形参数组分配内存空间,它共享实参数组的内存空间。函数中对形参数组的处理实际上就是对实参数组的处理,因此能改变实参数组的值。

实例源码:

<span style="font-family:SimHei;font-size:18px;">
#include<stdio.h>
void value(int a,int b)
{
	a++;
	b++;
}
void addr(int *a,int *b,int c[])
{
	(*a)++;
	(*b)++;
	for(int i=1;i<=10;i++)
		(*(c+i))++;
}
int main()
{
	int a,b,i;
	int c[11];
	for(i=1;i<=10;i++)
		c[i]=i;
	a=10;
	b=20;
	value(a,b);
	printf("%d %d\n",a,b);
	addr(&a,&b,c);
	printf("%d %d\n",a,b);
	for( i=1;i<=10;i++)
		printf("%d ",c[i]);
	printf("\n");
	return 0;
}</span>
<span style="font-family:SimHei;font-size:18px;">运行结果:</span>

    需要补充说明的是,以一维数组坐函数参数时,一般为不带大小的一维数组,如果需要数组元素个数信息,则另设一个数组类型形参来表示数组的大小;以二维数组作形参时,一般不带数组行数,但列数一定要注明,行数用一个整数类型来表示。

    因为地址传递这种参数传递方式可以使函数对形参的操作直接影响到对应的实参,因此我们可以通过这种参数传值方式将被调用函数处理的结果返回到调用函数中。当然,函数名也能带回一个处理结果,但是实际应用中往往需要将被调用函数的多个处理结果返回,此时就需要借助于地址传值了。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值