c语言中const是修饰变量使得变量为只读,但这里的只读无非就是不能作为左值被直接赋值 ,然而也是可以通过指针来改变的
但是在c++中const只是定义一个带名字(name)的常量而已,编译器会把(name)和值作为标志符写入一个表中,用的时候再去表中取值使用,当有指针试图修改(name)的时候,编译器会为(name)分配空间,但是表中的(name)和它的值依然没有改变,用的时候还是从表中取值,而不是从分配的内存空间取值
c代码如下
/*const.c*/
#include <stdio.h>
int main()
{
const int name=1;
int *p;
p=&name;
/*name=3,其实这样是非法的,const修饰的变量只读不能作为左值写入*/
*p=3; /*合法的操作*/
printf("name=%d\n",name);
printf("*p=%d\n",*p);
return 0;
}
打印结果是name=3
*p=3;
c++代码如下
/*const.cpp*/
#include <stdio.h>
int main()
{
const int name=1; /*在c++中name就是一个常量而已,把neme和1存入表中*/
int *p;
p=(int *)&name; /*开始为name分配空间 注意类型转换,否则报错*/
*p=3; /*合法的操作,空间中值为3*/
printf("name=%d\n",name); /*其实还是从表中取值,为1*/
printf("*p=%d\n",*p); /*从分配的空间中取值3*/
return 0;
}