一个很菜很菜的问题
看以下代码
const int t = 10;
int* aa = (int*)&t;
*aa= 100;
aa应该指向了t所在的内存。t是分配了内存的
在VC中观察内存显示t是被改变了的
但是在使用t时,其值并没有改变
刚接触c++,其中原理不是太清楚
各位大虾能不能给解释一下其中的原因
问题点数:100、回复次数:4Top
1 楼stonespace(stonespace)回复于 2002-10-10 15:34:15 得分 35
t应该等于100,const只是编译的时候起作用,如果强制类型转换,也可以改变它的值。
使用t的时候值没有变,可能是因为编译优化的结果,把用到t的地方都用常数10代替。Top
2 楼qsfsea(忍)回复于 2002-10-10 15:39:29 得分 30
文档区有篇文章是专门讲这个的,你去看看!Top
3 楼wanglei888(阿笨猫)回复于 2002-10-10 15:50:02 得分 35
const int t = 10;
// 这一句声明了一个常量t,编译器一般不对t分配内存地址,而是在编译之前
// 将把所有的t都替换成10
int* aa = (int*)&t;
// 这一句是因为要和c兼容的原因才被允许的,编译器为t分配了内存,并用10
// 初始化
*aa= 100;
// 为t分配的内存的值变为100, ,但这并不影响预编译过程中用10替换t
Top
4 楼yoking2002()回复于 2002-10-10 16:26:23 得分 0
搞明白了
如果在运行时为t赋值,可以看到t的值却是被改动了Top




