读书人

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

发布时间: 2012-03-13 11:21:10 作者: rapoo

一个有关常量指针的疑惑
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)]

读书人网 >C++

热点推荐