您的位置:首页 > 编程语言 > C语言/C++

C语言函数传递与值传递

2016-01-25 11:53 288 查看
    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>



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

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

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言