const 在c c++语言中的不同
2015-06-24 16:35
381 查看
#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编译器一样给其分配内存 */