前言:
此时大家对“c语言const是什么意思”都比较注重,同学们都需要了解一些“c语言const是什么意思”的相关内容。那么小编同时在网络上收集了一些对于“c语言const是什么意思””的相关资讯,希望你们能喜欢,看官们快快来学习一下吧!一、C语言中的const
(1) const修饰的变量是只读的,本质还是变量;
(2) const修饰的局部变量在栈上分配空间;
(3) const修饰的全局变量在只读存储区分配空间;
(4) const只在编译期有用,在运行期无用;
(5) const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边;例如可 以通过指针修改该变量的值。
(6) const将具有全局生命周期的变量存储于只读存储区。const不能定义真正意义上的常量。
(7) c语言的常量只有用enum定义的。
下面两图就很好的展示了上面几点:图1是代码,图2是图1的执行结果。
二、C++中的const
(1) 当const声明变量时,将会在符号表中放入常量的值;
(2) 编译过程中若发现使用常量时,则直接用符号表中的值替换;
(3) 编译过程中若发现下述情况则会给对应的常量分配存储空间;
对const常量使用了extern;
对const常量使用&操作符;
(4) C++编译器虽然可能为const常量分配空间,但不会使用该空间中的值。如下图所示:
从图3中可看出在编译时,会把c的值0存入符号表,在后面打印c的值就用符号表中的值替换c。
三、C++中的const与宏
(1) C++中的const常量类似于宏定义;
例如const int c=5;类似于#define c 5;
(2) const常量是由编译器处理的,编译器对const常量进行了类型检查和作用域检查;
(3) 宏定义则由预处理处理,单纯的文本替换。
下图将会解释以上几点
图4的代码若用C语言编译器将会报错,因为19行中的A和B是变量不是确定的值,所以报错。如图5所示:
图4的代码若用C++语言编译器则运行正常,因为A和B是常量了,而g()函数中a则用在f()中的宏定义替换。如图6所示;如果g()中的第12行去掉注释则编译就会报错,因为f()中的const int a =4;只在f()中起作用。如图7所示。
标签: #c语言const是什么意思