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语言好多语句(例如声明语句)其实并不需要对应的汇编语句执行一样。
我理解上有什么错误的地方,大家提出来再讨论。
|