sizeof(a)是把a作为一个数组类型来测试大小,结果是数组占用的字节数。 sizeof(&a)是把&a作为一个地址类型来测试大小,结果是4(64位系统里可能是8)。 数组名本身在计算中会自动转化成第一个元素的地址,但sizeof测试的时候不做计算,不转化。
a 的类型是 int[5] 数组
&a 的类型是 int(*)[5] 指针——指向int[5]数组的指针
&a[0] 的类型是 int * 指针——指向int类型的指针。
注:a, &a, &a[0]的值相等,都等于数组首元素的地址
sizeof(a)=20;
sizeof(*a)=4; 因为有取值符*,表示把a当成一个指针(int*),而a指向数组的首地址,
即a=&(a[0]),即sizeof(*a)=sizeof(*&(a[0]))=sizeof(a[0])=sizeof(int)=4。
sizeof(*&a)=20;//因为p=&a,所以=sizeof(*p),而*p=a,所以=sizeof(a)=20;