学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导
C语言中的const:
1.const修饰的变量是只读的,本质还是变量
2.const修饰的局部变量在栈上分配空间,所以可以用指针修改该空间的值而修改该const局部变量的值
3.const修饰的全局变量在只读存储区分配空间,修改值的话程序会崩溃
4.const只在编译期有用,在运行期无用
PS:C语言中定义真正意义上的常量,只能用enum枚举来定义,const不行
C++中的const:
1.当碰见const声明(不是const引用)时在符号表中放入常量(符号表是编译器内部的数据结构)
2.编译过程中若发现使用常量则直接以符号表中的值替换
3.编译过程中若发现下述情况则给对应的常量分配储存空间:(为了兼容C语言)
(1)该const常量为全局,且对const常量使用了extern
(2)对const常量使用&操作符
注意:C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值
示例程序:
#include <stdio.h>
int main()
{
const int c = 0;
int* p = (int*)&c;
*p = 5;
printf("c = %d\n",c);//打印0,使用的是符号表里的值
printf("*p = %d\n",*p);//打印5,使用的是c对应的内存空间的值
return 0;
}