「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」。
数组名是首元素的地址,&和sizeof数组名除外
只有 sizeof(数组名) 的时候,计算的是整个数组的大小,这后面+0,就不是 “纯净的” sizeof(数组名) 了,换句话说只有 sizeof(数组名) 这种特定的形式才是数组大小
sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
,除此之外所有的数组名都表示首元素的地址
题目五:
int main()
{
char arr[] = "abcdef";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr + 0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr + 1));
printf("%d\n", strlen(&arr[0] + 1));
return 0;
}
//6 \0之前出现了6个
//6 理由同上
//err
//err
// 6 &arr - 数组的地址 - 数组指针 char(*p)[7]=&arr
//随机值
//5 从b的位置开始数字符
{
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr + 0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr + 1));
printf("%d\n", sizeof(&arr[0] + 1));
return 0;
}
//7 a b c d e f \0 7个字符 7*1=7 sizeof计算的数组的大小。单位是字节
//4/8计算的是地址的大小 arr+0是首元素的地址
//1 *arr是首元素,sizeof(*arr)计算首元素大小
//1 arr[1]是第二个元素,sizeof(arr[1])计算的是第二个元素的大小
//4 &arr虽然是数组的地址,但也是地址,所以是4/8个字节
//4/8 &arr+1是跳过整个数组后的地址,但也是地址
// 4/8 &arr[0]+1 第二个元素的地址
题目六:
int main()
{
char* p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p + 1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p + 1));
printf("%d\n", sizeof(&p[0] + 1));
return 0;
}
// 4/8 - p + 1得到的是字符b的地址
//4/8 - 计算指针变量p的大小
//1 *p就是字符串的第一个字符 - 'a'
//1 int arr[10]; arr[0] == *(arr+0) p[0] == *(p+0) == 'a'
//4/8 地址
//4/8 地址
//4/8 地址
题目七:
int main()
{
char* p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p + 1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p + 1));
printf("%d\n", strlen(&p[0] + 1));
return 0;
}
//6
//5
//err
//err
//随机值
// 随机值
//5
题目八:
//二维数组
int main()
{
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a[0][0]));
printf("%d\n", sizeof(a[0]));
printf("%d\n", sizeof(a[0]+1));
printf("%d\n", sizeof(*(a[0] + 1));
printf("%d\n", sizeof(a + 1));
printf("%d\n", sizeof(*(a + 1));
printf("%d\n", sizeof(&a[0] + 1));
printf("%d\n", sizeof(*(&a[0] + 1));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a[3]));
return 0;
}
遗留一道二维数组的题目,大家先自行思考,明天会公布答案。加油!