const修饰的变量,其实质是告诉程序员或编译器该变量为只读,如果程序员在程序中显示的修改一个只读变量,编译器会毫不留情的给出一个error。
而对于像数组溢出,隐式修改等程序不规范书写造成的运行过程中的修改,编译器是无能为力的,也说明const修饰的变量仍然是具备变量属性的。
测试平台:64位 X86 Ubuntu
代码1:
#include<stdio.h>
void main(void)
{
const char a = 0;
a = 100;
printf("the a is %d\n" ,a);
}
结果:
baoli@ubuntu:~/c$ gcc const.c
const.c: In function ‘main’:
const.c:6:9: error: assignment of read-only variable ‘a’
a = 100;
说明:a是只读变量,且需要在定义时赋初值,定义后a的值不能被显性改变。
代码2:
#include<stdio.h>
void main(void)
{
char buf[4];
const char a = 0;
buf[-1] = 88;
printf("the a is %d\n" ,a);
}
结果:
baoli@ubuntu:~/c$ ./a.out
the a is 88
说明:const修饰的变量,其实质是告诉程序员和编译器该变量为只读,而对于像数组溢出,隐式修改等程序不规范书写造成的运行过程中的修改,编译器是无能为力的,也说明const修饰的变量仍然是具备变量属性的。