本帖最后由 魅影穿眸 于 2014-4-25 13:55 编辑
.局部const,并不是在常量区分配的,编译器会将const优化,类似于宏定义,出现const变量的地方在编译时就已经替换其值了。所以其实根本没有分配丝毫空间。(只有当你取变量的地址时,才会在栈上分配空间,但是这个分配的空间其实没有什么意义的,因为所有取const变量值的地方,编译时就已经替换成初值了)对于全局的const变量,是在常量区分配内存的,是真正的常量。内存是运行时(运行初期)分配的,但分配内存的大小编译时就决定了。“只读数据段”的内存,运行完才释放。
这两个问题的解答:
const int a=5;其实类似于宏定义#define a 5,编译时就将局部函数内的a替换成了5。
int *p=&a;他只是取了常量a的地址而已。 |