C/C++ : 类型限定符const

您所在的位置:网站首页 类型限定符 C/C++ : 类型限定符const

C/C++ : 类型限定符const

2024-07-09 14:13| 来源: 网络整理| 查看: 265

一、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