对形式参数使用const

     在编写处理诸如int这样基本类型的函数时,可向函数传递int数值,也可传递int型的指针,通常我们直接传递数值;只用在需要在函数中改值时,我们才传递指针。

     对于处理数组的函数,只能传递指针,这样可使程序的效率更高。

     如果通过值向函数传递数组,则函数中必须分配足够存放一份原数组的拷贝的存储空间,然后把原数组的所用数据复制到这个新数组中。如果简单的把数组的地址传递给函数,然后让函数直接读写原数组,程序的效率会更高.

     然而这种技术也会带来一些问题。通常C传递数据的值,其原因是要保证原始数据的完整性。函数使用原始数据的拷贝,这样就不会意外的修改原始数据。但是,由于处理数组的函数直接操作原始数据,所以他能修改原始数据。通常我们在使用数组时做参数时并不希望修改数组的值,如编写一个显示数组所有元素值的函数show_array(double ar[]),然而若在函数中不小心修改了数组的值,可能会违背写这个函数的目的。 

      ANSI C中提供了一个解决此问题的方法。如果设计意图是函数不改变数组的内容。那么可以在函数原型和定义的形式参数声明中使用关键字const。

下面的例子中有两个函数。

 

#include<stdio.h>

#define SIZE 5

void show_array(const double ar[],int n);//显示所有元素,使用了const关键字
void mult_array(double ar[],int n,double mult);  //修改数组中的元素
int main(int argc,char *argv[])
{
	double dip[SIZE] = {20.0,17.66,8.2,4.5,2.3};

	printf("the original idp array:\n");
	show_array(dip,SIZE);
	mult_array(dip,SIZE,2.5);
	printf("the dip array after calling mult_array():\n");
	show_array(dip,SIZE);

	
	return 0;
}

//显示数组内容
void show_array(const double ar[],int n)
{
	int i;
	for(i = 0;i < n; i++)
		printf("%8.3f",ar[i]);
	putchar('\n');
}

//数组中的元素同乘以一个数
void mult_array(double ar[],int n,double mult)
{
	int i;

	for(i = 0; i < n;i++)
		ar[i] *=mult;
}

 

 说明:

void show_array(const double ar[],int n);//原型

 

 

 

//定义
void show_array(const double ar[],int n)
{
	int i;
	for(i = 0;i < n; i++)
		printf("%8.3f",ar[i]);
	putchar('\n');
}

 

 

  这告知编译器:函数应当把ar所指向的数组作为包含常量数组的数组对待。这样,如何在函数中不小心改变了数组元素的值,编译器会报错,通知函数视图修改常量。

 

 

 

总之,如果函数想修改数组的值,那么在函数声明和定义时不使用const,如何不想修改数组的值,则最好在声明数组参数是使用const。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值