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