69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main(void)
{
char a[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
char (*p)[3] = a;
char (*(*q)[3])[4] = a;
printf("%x\n", p[0][1]);
printf("%x\n", q[0][0][1]);
return 0;
}
6: char (*p)[3] = a;//汇编解释为p=&a[0]
00401064 lea eax,[ebp-10h]
00401067 mov dword ptr [ebp-14h],eax
7: char (*(*q)[3])[4] = a; //汇编解释为q=&a[0];
0040106A lea ecx,[ebp-10h]
0040106D mov dword ptr [ebp-18h],ecx //[ebp-18]=&a[0]
8:
9: printf("%x\n", p[0][1]);
00401070 mov edx,dword ptr [ebp-14h]//edx==&a[0]
00401073 movsx eax,byte ptr [edx+1] //[edx+1]=*(a+1)==a[1];
00401077 push eax //这里a[1]入栈,最后输出a[1]的值。
00401078 push offset string "%x\n" (0042201c)
0040107D call printf (004010e0)
00401082 add esp,8
10: printf("%x\n", q[0][0][1]);
00401085 mov ecx,dword ptr [ebp-18h] //ecx=&a[0]
00401088 mov edx,dword ptr [ecx] //错误出现在这里,本应为byte
//这里是dword 取2个字节,执行后edx=03020100h
0040108A add edx,4 //edx=edx+4;
0040108D push edx //最后输出03020104就不足为奇了。
0040108E push offset string "%x\n" (0042201c)
00401093 call printf (004010e0)
00401098 add esp,8