传递数组参数时最好使用地址传递

在把数组作为参数传递给函数时,有值传递(by value)和地址传递(by reference)两种方式。在值传递方式中,在声明和定义函数时,要在数组参数的尾部加上一对方括号([]),调用函数时只需将数组的地址(即数组名)传递给函数。
例如:
void func(int[]);声明
voidfunc(int a[]) 定义
{

}
int main()
{
int x[10];
func(x);//调用
return 0;
}
在值传递方式中,数组x将被复制一份,复制所得的数组将被存放在栈中,然后由func()函数接收。由于传递给func()函数的是初始数组的一份拷贝,因此在byval_func()函数内部修改传递过来的数组对初始数组没有任何影响,所以想在func中对原数组进行修改是不可能的,这是第一个缺点。

第二个缺点就是:**值传递方式的开销是非常大的。**首先空间来说,要在栈内开辟空间存放这个拷贝的数组,而且拷贝生成的代码使你代码量增大,时间来说,需要完整地复制初始数组并将这份拷贝存放到栈中,这将耗费相当可观的运行时间,因而值传递方式的效率比较低。
按地址传递形式如下:

void func(int*);声明
voidfunc(int *a) 定义
{

}
int main()
{
int x[10];
func(x);//调用
return 0;
}
在地址传递方式中,没有复制初始数组并将其拷贝存放在栈中,fun()函数只接收到指向一个int类型常量的指针,因此在编写程序时要保证传递给func()函数的是指向一个由int类型值组成的数组的指针。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值