龙空技术网

第3课-进化后的const分析

清界读书记 162

前言:

此时大家对“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的执行结果。


图1

图2

二、C++中的const

(1) 当const声明变量时,将会在符号表中放入常量的值;

(2) 编译过程中若发现使用常量时,则直接用符号表中的值替换;

(3) 编译过程中若发现下述情况则会给对应的常量分配存储空间;

对const常量使用了extern;

对const常量使用&操作符;

(4) C++编译器虽然可能为const常量分配空间,但不会使用该空间中的值。如下图所示:

图3

从图3中可看出在编译时,会把c的值0存入符号表,在后面打印c的值就用符号表中的值替换c。

三、C++中的const与宏

(1) C++中的const常量类似于宏定义;

例如const int c=5;类似于#define c 5;

(2) const常量是由编译器处理的,编译器对const常量进行了类型检查和作用域检查;

(3) 宏定义则由预处理处理,单纯的文本替换。

下图将会解释以上几点

图4

图4的代码若用C语言编译器将会报错,因为19行中的A和B是变量不是确定的值,所以报错。如图5所示:

图5

图4的代码若用C++语言编译器则运行正常,因为A和B是常量了,而g()函数中a则用在f()中的宏定义替换。如图6所示;如果g()中的第12行去掉注释则编译就会报错,因为f()中的const int a =4;只在f()中起作用。如图7所示。

图6

图7

标签: #c语言const是什么意思