char arr1[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%dn", sizeof(arr1)); //6 计算的是数组的大小
char arr[] = "abcdef";
printf("%dn", sizeof(arr)); //7 计算的是字符串的大小(包括/0)
printf("%dn", sizeof(arr+0)); //4、8 计算的是首元素的地址
printf("%dn", sizeof(*arr)); //1 首元素的大小
printf("%dn", sizeof(arr[1])); //1 第二个元素的大小
printf("%dn", sizeof(&arr)); //4、8 数组的地址
printf("%dn", sizeof(&arr+1)); //4、8 跳过整个数组后的地址
printf("%dn", sizeof(&arr[0]+1)); //4、8 第二个元素的地址
printf("%dn", strlen(arr)); //6
printf("%dn", strlen(arr+0)); //6
printf("%dn", strlen(&arr)); //6
printf("%dn", strlen(&arr+1)); //随机值
printf("%dn", strlen(&arr[0]+1)); //5
char* p = "abcdef";
printf("%dn", sizeof(p)); //4、8 计算的是指针变量p的大小
printf("%dn", sizeof(p + 1)); //4、8 得到的是字符b的地址
printf("%dn", sizeof(*p)); //1 第一个字符的大小
printf("%dn", sizeof(p[0])); //1 p[0]==*(p+0) 第一个元素的大小
printf("%dn", sizeof(&p)); //4、8 数组的地址
printf("%dn", sizeof(&p + 1)); //4、8 跳过整个数组后的地址
printf("%dn", sizeof(&p[0] + 1)); //4、8 第二个元素的地址
printf("%dn", strlen(p)); //6
printf("%dn", strlen(p + 1)); //5
printf("%dn", strlen(&p)); //随机值
printf("%dn", strlen(&p + 1)); //随机值
printf("%dn", strlen(&p[0] + 1)); //5
int a[3][4] = { 0 };
printf("%dn", sizeof(a)); //48
printf("%dn", sizeof(a[0][0])); //4
printf("%dn", sizeof(a[0]));
//16 a[0]是第一行的数组名,计算的是第一行的大小
printf("%dn", sizeof(a[0]+1));
//4、8 a[0]是第一行的数组名,是首元素的地址,a[0]+1计算的是第一行第二个元素的地址
printf("%dn", sizeof(*(a[0] + 1)));
//4 第一行第二个元素的大小,int型,为4个字节
printf("%dn", sizeof(a+1));
//4、8 a是二维数组的数组名,是首元素的地址(第一行),a+1计算的是第二行的地址
printf("%dn", sizeof(*(a + 1)));
//16 计算的是第二行的大小 4x4=16字节
printf("%dn", sizeof(&a[0] + 1));
//4、8 第二行的地址
printf("%dn", sizeof(*(&a[0] + 1)));
//16 第二行的大小
printf("%dn", sizeof(*a));
//16 a是二维数组的数组名,是第一行的地址,*a计算的是第一行的大小
printf("%dn", sizeof(a[3])); //16