首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个有关常量指针的疑惑,该如何处理

2012-03-13 
一个有关常量指针的疑惑void main(int argc, char * argv[]){const int ic 1int *const ptr (int *co

一个有关常量指针的疑惑
void main(int argc, char * argv[])
{
const int ic = 1;
int *const ptr = (int *const)⁣
*ptr = 2;
printf("*ptr = %d, ic = %d\n",*ptr,ic);
}
VC6.0+WINXP下,
查看可知:&ic和ptr的地址是同一个,但输出的结果却是:*ptr = 2, ic = 1;
为什么&ic和ptr的地址却又是同一个呢?谢谢


[解决办法]
是VC编译器搞得鬼

因为const int ic = 1;编译器认为ic为一常量,不会改变;
printf("*ptr = %d, ic = %d\n",*ptr,ic);时直接将ic替换为1。


看看汇编代码就清楚啦
const int ic = 1;
004113CE mov dword ptr [ic],1 
int *const ptr = (int *const)⁣
004113D5 lea eax,[ic] 
004113D8 mov dword ptr [ptr],eax 
*ptr = 2;
004113DB mov eax,dword ptr [ptr] 
004113DE mov dword ptr [eax],2 
int n = ic;
004113E4 mov dword ptr [n],1 
printf("*ptr = %d, ic = %d\n",*ptr,ic);
004113EB mov esi,esp 
004113ED push 1
004113EF mov eax,dword ptr [ptr] 
004113F2 mov ecx,dword ptr [eax] 
004113F4 push ecx
004113F5 push offset string "*ptr = %d, ic = %d\n" (4159A8h) 
004113FA call dword ptr [__imp__printf (4182BCh)]

热点排行