C/C++ : 类型限定符const |
您所在的位置:网站首页 › 类型限定符 › C/C++ : 类型限定符const |
一、const介绍 关键字const是C/C++中的类型限定符(qualified type),以const关键字声明的对象,其值不能通过赋值或递增、递减来修改,但可以初始化const变量。 二、用法说明 先来看一个简单的例子: #include int main(int argc, char **argv) { const int a = 10; // work (initialization) const int a; a = 10; // not work (assignment) return 0; }正如上面的注释所说的那样,第一行代码可以工作,因为它是对"const int"类型的变量"a"初始化;而第二行代码不工作,因为它先定义了一个"const int"类型的变量,然后对"a"赋值。 用关键字const修饰普通变量和数组相对简单和容易理解,当用来修饰指针时,要复杂一些,因为需要区分是限定指针本身为const还是限定指针指向的值为const,再来看下面的例子: #include int main(int argc, char **argv) { const char *a = NULL; // *a is const, but a isn't a = argv[1]; // work (change a, not *a) *a = argv[1]; // not work (change *a, not a) return 0; }上面的例子中,const限定指针a所指向的值*a是不可变的,但指针a本身是可变的,可以随时指向其他的内存位置。 要想限定指针a本身不可变,将限定符const放在*的右侧即可,如下: int * const a; // a is const此时,指针a本身的值不可变,a必须指向同一个地址,但是它所指向的值可以改变。
三、总结 用const来限定普通变量,其值不可变。 用const来限定指针,需要注意区分是限定指针本身为const还是限定指针指向的值为const。当const放在*左边任意位置,限定了指针指向的数据不能改变;当const放在*右边,限定了指针本身不能改变。 最后的这个例子和编译错误提示很好的总结了以上几点: #include int main(int argc, char **argv) { const int a = 10; const int b; b = 10; const int *pa = NULL; pa = &a; *pa = a; int *const pb; pb = &a; *pb = a; return 0; } error : assignment for read-only variable 'b' const int b; b = 10; error : assignment for read-only variable '*pa' *pa = a; error : assignment for read-only variable 'pb' pb = &a;参考资料: (Sixth Edition), by Stephen Prata. P.403
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |