|  | 
 
 发表于 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
 
 
 
 
   
 
 | 
 |