|
发表于 2014-3-28 20:23:14
|
显示全部楼层
我也一样,两个都是40,其实这个40我想是这样的,这些数据都是在栈中的,而VC的入栈顺序是自右往左的,所以当最后一个元素进栈的时候,也就是数组的第一个元素,这样,一个数据时4个字节,那么10个的话,就是40个,而数组名指向的也是数组的第一个元素,而第一个元素在栈中就是第40个元素啊!而且不管是a或&a它都指向的是同一个地址!
下面是反编译的情况,你看一下就明白了:
4: int a[10] = {1,2,3,4,5,6,7,8,9,10};
00401028 mov dword ptr [ebp-28h],1
0040102F mov dword ptr [ebp-24h],2
00401036 mov dword ptr [ebp-20h],3
0040103D mov dword ptr [ebp-1Ch],4
00401044 mov dword ptr [ebp-18h],5
0040104B mov dword ptr [ebp-14h],6
00401052 mov dword ptr [ebp-10h],7
00401059 mov dword ptr [ebp-0Ch],8
00401060 mov dword ptr [ebp-8],9
00401067 mov dword ptr [ebp-4],0Ah
5: printf("%p\n",&a);
0040106E lea eax,[ebp-28h]
00401071 push eax
00401072 push offset string "%p\n" (00422020)
00401077 call printf (00401120)
0040107C add esp,8
6: printf("%p\n",a);
0040107F lea ecx,[ebp-28h]
00401082 push ecx
00401083 push offset string "%p\n" (00422020)
00401088 call printf (00401120)
0040108D add esp,8
|
|