1、const关键字,它限定一个变量不允许被改变(也就是只读变量),使用const可以再一定的程度上提高代码的安全性和可靠性,,也可以方便别人看代码,明白const所起的作用,
2、也可以保护数组的内容:对于处理数组的函数,只能传递指针,原因是这样能是程序的效率更高。如果通过值向函数传递数组,那么函数中必须分配足够的空间存放一份原数组的拷贝的存储空间,然后把原数组的所有数据复制到这个新数组中,如果简单的把数组的地址传递给函数,然后函数直接读写原数组,程序的效率会更高,
不过这样也带来了一些问题,通常传递数据的值,其原因是保证原数据的完整性,如果像上面那样通过值向函数传递数组,效率不高,这里用const很好解决了即要保护原始数据,又要使其效率高的要求,如下面的函数实现的功能是,给数组每个元素加1,
void add(int a[ ],int n, argv)
{
int =i;
for(i=0;i<n;i++)
{
a[i] +=argv;
}
}
因此,调用下面的函数调用见识数组price数组的每个元素加1
add( price, 10, 1);
该函数改变数组的内容,为什么能改变呢?是因为函数使用了指针,从而能够直接使用原始数据,
然而很多情况下我们不想改变原始数据,那么可以在函数声明和定义的形参变量声明中使用关键字const,例如fun()的原型和定义应该如下:
int fun ( const in a[ ],int n, int fun)
{
int i=0;
int value=0;
for(i=0;i<n;i++)
{
value +=a[i];
}
return (value=value/n);
}
这告诉编译器:函数应当把a所指向的数组作为一个包含常量数据的数组对待。这样如果意外的修改数组中元素的值,那么编译器会发现这个错误,并生成错误的信息,,通知您试图修改常量,
在 这里需要理解的是,使用const并不能要求原始数组不可以改变,只是说明调用数组的函数在处理数组时,应把数组当做常量,,
总之,在如果想在函数中修改数组的元素的值时,不用const,如果不想函数修改数组的元素值时,加上const。
3、下面举一些例子解释下const关键字关于其他的内容,
例一:用const修饰符定义常量
const int limit=100; //修饰的是limit 所以limit是不能改变的
limit=10; //error
int *p=&limit; //error
fun(&limit); //error void fun(int *a);
const
限定的离它最近的字符或者字符串,所以例一const限定的是limit
例二:指向常量的指针变量:
const char*
name=namel; //这里限定的是*(内容)
name[2]='a'; //error
name=name1; //right
根据上面所说的,const限定的是离它最近的字符或者字符串,这里限定的是*,什么意思呢?
就是name内容是不可以改变的,即name[2]='a';是错误的,但是它的名字可以改变:故name=name1是正确的
例三:常(量)指针
char *
const name=namel;//这里限定的name(名字)
name[2]=‘a’; //right
name="zheng"; //错误
这里和上面的例二相反;
例四:指向常量的常(量)指针:
const char *const name="chen";
name[2]='a'; // error
name="zhang"; //error
强烈建议在初始化时说明指针的指向,防止出现野指针,