|  | 
 
 发表于 2016-6-13 20:33:36
|
显示全部楼层 
| 复制代码104:      int array[4] = {0, 1, 2, 3};
00401028   mov         dword ptr [ebp-10h],0
0040102F   mov         dword ptr [ebp-0Ch],1
00401036   mov         dword ptr [ebp-8],2
0040103D   mov         dword ptr [ebp-4],3
105:
106:      printf("0x%08X, 0x%08X\n", array, &array);
00401044   lea         eax,[ebp-10h]
00401047   push        eax
00401048   lea         ecx,[ebp-10h]
0040104B   push        ecx
0040104C   push        offset string "0x%08X, 0x%08X\n" (0042201c)
00401051   call        printf (00401090)
00401056   add         esp,0Ch
 上边是VC6 编译器Debug模式下的反汇编结果。
 array和&array 都是取了 array[0] 的地址。
 
 根据我的理解,从汇编层面讲,内存中 没有array这个东西,所以不存在错不错误。就好像,C语言好多语句(例如声明语句)其实并不需要对应的汇编语句执行一样。
 
 我理解上有什么错误的地方,大家提出来再讨论。
 
 
 | 
 |