现在的位置: 首页 > 综合 > 正文

const关键字

2018年01月22日 ⁄ 综合 ⁄ 共 1472字 ⁄ 字号 评论关闭

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


强烈建议在初始化时说明指针的指向,防止出现野指针,















抱歉!评论已关闭.