#include<stdio.h>
#include<string.h>
int main()
{
/*数组名是首元素的地址(除了下面两种情况除外)
1:sizeof(数组名)——数组名表示整个数组
2:&数组名——数组名表示整个数组*/
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));//表示计算数组总大小,16
printf("%d\n",sizeof(a+0));//表示首元素地址,4/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));//表示计算数组的地址,4/8
printf("%d\n",sizeof(*&a));//表示计算数组总大小,16
printf("%d\n",sizeof(&a+1));//表示计算数组下一个位置的地址,4/8
printf("%d\n",sizeof(&a[0]));//表示计算第一个元素地址的大小,4/8
printf("%d\n",sizeof(&a[0]+1));//表示计算第二个元素地址的大小,4/8
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));//表示计算数组总大小,6
printf("%d\n", sizeof(arr+0));//表示计算数组第一个元素的地址大小,4/8
printf("%d\n", sizeof(*arr));//表示计算数组第一个元素的大小,1
printf("%d\n", sizeof(arr[1]));//表示计算数组第二个元素的大小,1
printf("%d\n", sizeof(&arr));//表示计算数组的地址,4/8
printf("%d\n", sizeof(&arr+1));//表示计算数组下一个位置的地址,4/8
printf("%d\n", sizeof(&arr[0]+1));//表示计算数组第二个元素的地址大小,4/8
printf("%d\n", strlen(arr));//随机数,直到数到’\0'为止
printf("%d\n", strlen(arr+0));//随机数,直到数到’\0'为止,与上面相同
printf("%d\n", strlen(*arr));//非法访问,相当于strlen(97)开始计算
printf("%d\n", strlen(arr[1]));//非法访问,相当于strlen(98)开始计算
printf("%d\n", strlen(&arr));//随机数,直到数到’\0'为止,与strlen(arr)相同
printf("%d\n", strlen(&arr+1));//随机数,直到数到’\0'为止,与上面相差6
printf("%d\n", strlen(&arr[0]+1));//随机数,直到数到’\0'为止,与strlen(arr)相差1
}