C语言中的const
- const修饰的变量是只读的, 本质还是变量
- const修饰的局部变量在栈上分配空间
- const修饰的全局变量在只读存储区分配空间
- const只在编译期有用, 在运行期无用
注意:const修饰的变量不是真的常量, 它只是告诉编译器该变量不能出现在赋值符号的左边
C++中的const
C++在C的基础上对 const 进行了进化处理
编译器当碰见 const 声明时在符号表中放入常量
编译过程中若发现使用常量则直接以符号表中的值替换
编译过程中若发现下述情况则给对应的常量分配存储空间
对 const 常量使用了extern
对 const 常量使用&操作符
注意: C++编译器虽然可能为const常量分配空间,但是不会使用其存储空间中的值
/*
测试代码
main.c
C语言中的const
*/
#include <stdio.h>
int main()
{
const int c = 0;
int* p = (int*)&c;
printf("Begin...\n");
*p = 5;
printf("c = %d\n", c); // c 的值被改变为0
printf("End...\n");
return 0;
}
运行结果
Begin...
c = 5
End...
/*
测试代码
main.cpp
C++中的const
*/
#include <stdio.h>
int main()
{
const int c = 0;
int* p = (int*)&c;
printf("Begin...\n");
*p = 5;
printf("c = %d\n", c); // c 的值依旧为符号表中的值 0
printf("*p = %d\n", *p); // p 指向的地址空间的值被改变为 5 , 但不会被使用
printf("End...\n");
return 0;
}
运行结果
Begin...
c = 0
*p = 5
End...