编写一个处理基本类型int 的函数值时,要选择是传递int类型的值还是要传递指向int的指针。同常都是直接传递数值,只是程序炫耀在函数中改变该数值是,才会传递指针。对于数组别无选择,必须传递指针,因为这样做效率比较高。如果一个函数按值传递数组,则必须分配足够的空间来储存原数组的副本,然后把原数组所有的数据拷贝值新的数组中。如果把和谐数组的地址传递给函数,让函数直接处理原数组则效率要高。传递时会出现一些问题,C通常都按值传递数组,因为这样可以保证数据的完整性。如果函数使用的是原始数据的副本没就不会以外修改冤死数据,但是处理数组的函数通常都需要使用原始数据,因此,这样的函数可以修改原数组,
例如下面的函数给每个数组的每个元素都加上一个相同的值:
void add_to (ouble ar[],int n,double val)
{
int i;
for(i=0;i<n;i++)
ar[i]+=val;
}
因此调用该函数后,prince数组中每个元素的值都增加了2.5;
add_to(prince,100,2.5);
该函数改了数组中的数据,之所以可以这样做,是因为韩阿叔通过指针直接使用了原始数据
对形式参数的使用const
如果函数的意图不是修改数组中的数据内容,那么函数原型和函数定义中声明形式参数时应使用关键字const例如sum函数的原型和定义如下
int sum(const int ar[],int n); //函数原型
{
int i;
int total=0;
for(i=0;i<n;i++)
total+=ar[i];
return total;
}
这里使用const并不是要求原数组是常量,而是该函数在处理数组是将其视为常量,不可更改。这样使用可以保护数组不被修改,就像按值传递可以保护基本数据类型的原始值不被改变一样,一般而言,如果编译器编写的函数需要修改数组,在生命数组形参是则不适应const,如果编写的函数不需要修改数组,那么在声明数组形参时最好使用const.