|
发表于 2014-11-7 22:23:04
|
显示全部楼层
我把前三句汇编了下
第一句: const int* i = 6;
00401028 mov dword ptr [ebp-4],6 // 指针i = 6
第二句: i++;
0040102F mov eax,dword ptr [ebp-4] // eax = i = 6
00401032 add eax,4 // eax = eax + 4 = 10
00401035 mov dword ptr [ebp-4],eax // 指针i = eax = 10
第三句: printf("为什么等于这个数%d\n",i);
00401038 mov ecx,dword ptr [ebp-4] // eax = 10
0040103B push ecx // 参数i
0040103C push offset string "\xce\xaa\xca\xb2\xc3\xb4\xb5\xc8\xd3\xda\xd5\xe2\xb8\xf6\xca\xfd%d\n" (00 // 参数"为什么等于这个数%d\n"
00401041 call printf (00401400) // 调用printf(输出的值为10)
也就是说虽然i是一个指针,但是它同时也是一个变量(和int、char等等相同),
第一句将i赋值为6,
第二句i++,因为指针变量i的类型为int(一般大小为4个字节,是情况而定),指针变量加1相当于+1 * sizeof(指针类型),所以最后i的值为6 + 4 = 10
第三句输出指针i本身的值,所以输出10,但是如果是*i则表示输出在内存i处(内存地址10处)的内容 |
|