数组名的含义:
1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
3.除此之外所有的数组名都表示首元素的地址
#include<stdio.h>
int main()
{
int a[3][4]={0};
printf("%d\n",sizeof(a)); //48=3*4*sizeof(int)
printf("%d\n",sizeof(a[0][0])); //4 --第一行第一个元素
printf("%d\n",sizeof(a[0])); //16--第一行整个元素
printf("%d\n",sizeof(a[0]+1)); //4 --a[0]作为数组名并没有单独放在sizeof内部,也没取地址
//a[0]就是第一行第一个元素的地址,
//a[0]+1就是第一行第二个元素的地址
printf("%d\n",sizeof(*(a[0]+1))); //4 ---第一行第二个元素
printf("%d\n",sizeof(a+1)); //4 ---a是二维数组的数组名,并没有取地址,
//也没有单独放在sizeof内部,所以a表示二维数组首元素的地址,
//即第一行的地址,a+1就是二维数组第二行的地址。
printf("%d\n",sizeof(*(a+1))); //16---第二行的大小
printf("%d\n",sizeof(&a[0]+1)); //4---a[0]表示第一行的数组名,&a[0]取出的是第一行的地址
//&a[0]+1就是第二行的地址
printf("%d\n",sizeof(*(&a[0]+1))); //16----第二行的大小
printf("%d\n",sizeof(*a)); //16---a表示第一行的地址 *a就是第一行{*(a+0)-->a[0]}
printf("%d\n",sizeof(a[3])); //16-----a[3]是第四行数组名(如果有的话)
//所以其实不存在,也能通过类型计算大小的。
return 0;
}