急 急 大家看下这个关于sizeof(&i)的有关问题

急 急 大家看下这个关于sizeof(&i)的问题
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i[10];
int *p=i;
int k=sizeof(p);
 int j=sizeof(&i);
printf("%d %d\n",j,k);
return 0;
}
输出结果是40,4那位高手帮我解释下啊 
1,sizeof(&i)怎么与sizeo(i)相等呢
2,sizeof(p)=4我可以理解

------解决方案--------------------
因为 &i 和 i 是等价的. 数组名取地址还是它本身.
------解决方案--------------------
据说VS2005有这么个bug
------解决方案--------------------
>sizeof(&i)怎么与sizeo(i)相等呢
这跟编译器有关,VC6它俩一样,你可以看看对应的汇编指令

------解决方案--------------------
探讨

因为 &amp;i 和 i 是等价的. 数组名取地址还是它本身.

------解决方案--------------------
本人用的VS 2005,测试楼主代码,输出是:4 4
------解决方案--------------------
你用的是微软的编译器吧,这个应该是微软对sizeof实现的时候有理解错误,正常的结果应该和
int(*p)[10]; sizeof(p);一样的。gcc就没问题
------解决方案--------------------
&i 对数组名取地址 得到一个数组指针 所以结果为4
------解决方案--------------------
VS08 结果4 4
------解决方案--------------------
按照现在的标准,答案应该是4,VC6编译会出现这样的问题,就是&a指的是数组a的地址,即a[0]的地址,而vc编译器是用隐含指针指向数组第一个元素的地址来表示数组的,所以,对它来讲,这就表示数组a。