#include <string.h>
#include <stdio.h>
#include<stdlib.h>
int main()
{
const int a = 10;
int* c = (int*)&a;
*c = 11;
printf("a = %d,*(int*)&a = %d\n",a,*(int*)&a);
system("pause");
}
/*
c 语言编译器: 11 11
c++ 编译器 10 11
原因:
C 和 C++对cosnt变量的处理不同
在C编译下,const常量是完全分配了内存空间的,在使用时,是像变量一样来使用的。
C++编译器通常会把常量存放在符号表中,如<a,10>,编译时直接从符号表中查。
C++编译器通常不会为常量分配内存,但这里取它的地址( (int*)&a ),所以会为它分配内存。此时可以修改内存中存放的值,但不能修改符号表中的那个值。
以上都是针对简单常量,如果是复杂的常量如结构体,C++编译器不会复杂到将它们保存符号表中。 一定像c编译器一样给其分配内存
*/