整形数组:
int main()
{
//数组名首元素地址,下面是两个例外
//1.sizeof(数组名)-数组名表示整个数组
//2.&数组名-数组名表示整个数组
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//计算的是数组总大小,单位是字节-16
printf("%d\n", sizeof(a+0));//此时的a还是首元素地址 32平台4个字节,64平台为8
printf("%d\n", sizeof(*a));//求的是首元素的大小,4个字节
printf("%d\n", sizeof(a+1));//4/8
printf("%d\n", sizeof(a[1]));//4
printf("%d\n", sizeof(&a));//不是16,&a取出的是数组的地址,但是数组的地址那也是地址,地址的大小就是4/8个字节
printf("%d\n", sizeof(*&a));//16 与第一种写法一样
printf("%d\n", sizeof(&a+1));//4/8,虽然跳过整个数组,但是还是地址,
printf("%d\n", sizeof(&a[0]));//4/8
}
字符数组:
char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", sizeof(arr));//6 sizeof计算的是数组大小
printf("%d\n", sizeof(arr+0));//4/8 首元素地址
printf("%d\n", sizeof(*arr));//1 *arr就是首元素,大小一个字节
printf("%d\n", sizeof(arr[1]));//1
printf("%d\n", sizeof(&arr));//4/8 虽然是数组地址,但是还是数组地址
printf("%d\n", sizeof(&arr+1));//4/8
printf(