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

在把数组作为参数传递给函数时,有值传递(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类型值组成的数组的指针。

猜你喜欢

转载自blog.csdn.net/weixin_53344209/article/details/114764004