前言
强人才能锁男, 老人可不行!!! 变秃与变强,我选择了秃右强!!
目录
题型强训
数组传参
int main()
{
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a)); //表示 整个数组的大小 16
printf("%d\n", sizeof(a + 0)); //表示 首元素的地址的大小 4
printf("%d\n", sizeof(*a)); //表示 第一个元素的大小 4
printf("%d\n", sizeof(a + 1)); //表示 第二个元素的地址的大小 4
printf("%d\n", sizeof(a[1])); //表示 第二个元素的大小 4
printf("%d\n", sizeof(&a)); //表示 整个数组的地址的大小 4
printf("%d\n", sizeof(*&a)); //表示 数组所有元素的长度 16
//&a的类型为: int (*)[4] 一个数组指针的类型,对这个数组指针进行解引用,访问的就是整个数组
printf("%d\n", sizeof(&a + 1)); //表示 数组后的一个地址的大小 4
printf("%d\n", sizeof(&a[0])); //表示 首元素的地址的大小 4
printf("%d\n", sizeof(&a[0] + 1)); //表示 第二个元素的地址的大小 4
char arr[] = { 'a','b','c','d','e','f' }; //该字符数组是用单个字符进行初始化的,所以数组内部没有 \0
printf("%d\n", sizeof(arr)); //表示的是 整个数组的大小 6
printf("%d\n", sizeof(arr + 0)); //表示的是 数组首元素的地址的大小 4
printf("%d\n", sizeof(*arr)); //表示的是 数组首位元素的大小 1
printf("%d\n", sizeof(arr[1])); //表示的是 数组第二个元素的大小 1
printf("%d\n", sizeof(&arr)); //表示的是 整个数组的地址的大小 4
printf("%d\n", sizeof(&arr + 1)); //表示的是 数组第二个元素的地址的大小 4
printf("%d\n", sizeof(&arr[0] + 1)); //表示的是 数组中第二个元素的地址的大小 4
printf("%d\n", strlen(arr)); // 表示的整个数组的大小 随机值 因为数组中没有 \0
printf("%d\n", strlen(arr + 0)); // 表示的整个数组的大小 随机值
//printf("%d\n", strlen(*arr)); // 格式错误 这里传参传的是元素,strlen函数需要传地址
// printf("%d\n", strlen(arr[1])); // 格式错误 原因同上
printf("%d\n", strlen(&arr)); // 传的整个数组的地址, 随机值
printf("%d\n", strlen(&arr + 1)); // 传的数组后的地址, 随机值-6
printf("%d\n", strlen(&arr[0] + 1)); // 传的第二个元素的地址, 随机值-1
return 0;
}
int main()
{
char arr[] = "abcdef"; // 以字符串的形式初始化数组,末位会自动补\0
printf("%d\n", sizeof(arr)); // 表示的是 整个数组的大小,\0也会计算在内 7
printf("%d\n", sizeof(arr + 0)); // 表示的是 数组首元素的地址的大小 4
printf("%d\n", sizeof(*arr)); // 表示的是 数组首元素的大小 1
printf("%d\n", sizeof(arr[1])); // 表示的是 数组第二个元素的大小 1
printf("%d\n", sizeof(&arr)); // 表示的是 整个数组的地址的大小 4
printf("%d\n", sizeof(&arr + 1)); // 表示的是 数组后一个地址的大小 4
printf("%d\n", sizeof(&arr[0] + 1)); // 表示的是 数组第二个元素的地址的大小 4
printf("%d\n", strlen(arr)); // 表示 整个数组的长度 6
printf("%d\n", strlen(arr + 0)); // 表示 传的数组首元素的地址,表示整个数组的大小 6
//printf("%d\n", strlen(*arr)); // 格式错误 传的元素
//printf("%d\n", strlen(arr[1])); // 格式错误 原因同上
printf("%d\n", strlen(&arr)); // 表示 整个数组的大小,传的整个数组的地址, 6
printf("%d\n", strlen(&arr + 1)); // 表示 从整个数组结束(跳过了\0) 到下一个\0 之间的长度, 随机值
printf("%d\n", strlen(&arr[0] + 1)); // 表示 剩余数组的大小,传的是数组中第二个元素的地址, 5
return 0;
}
int main()
{
int a[3][4] = { 0 };
printf("%d\n", sizeof(a)); //表示 整个数组的大小 48
printf("%d\n", sizeof(a[0][0])); //表示 第一行第一列的元素的大小 4
printf("%d\n", sizeof(a[0])); //表示 第一行元素的大小 16
printf("%d\n", sizeof(a[0] + 1)); //表示 第二行元素地址的大小 4
printf("%d\n", sizeof(*(a[0] + 1))); //表示 第一行第二列的元素的大小 4
printf("%d\n", sizeof(a + 1)); //表示 第二行元素地址的大小 4
printf("%d\n", sizeof(*(a + 1))); //表示 第二行元素的大小 16
printf("%d\n", sizeof(&a[0] + 1)); //表示 第二行元素地址的大小 4
printf("%d\n", sizeof(*(&a[0] + 1))); //表示 第二行元素的大小 16
printf("%d\n", sizeof(*a)); //表示 第一行元素的大小 16
printf("%d\n", sizeof(a[3])); //表示 越界,但是是表示第四行地址的大小 16
return 0;
}
指针传参
int main()
{
char* p = "abcdef";
printf("%d\n", sizeof(p)); //表示 元素a地址的大小 4
printf("%d\n", sizeof(p + 1)); //表示 元素b地址的大小 4
printf("%d\n", sizeof(*p)); //表示 元素a的大小 1
printf("%d\n", sizeof(p[0])); //表示 元素a的大小 1
printf("%d\n", sizeof(&p)); //表示 指针p地址的大小 4
printf("%d\n", sizeof(&p + 1)); //表示 存放指针p地址的后一个地址的大小 4
printf("%d\n", sizeof(&p[0] + 1)); //表示 元素b地址的大小 4
printf("%d\n", strlen(p)); //表示的是 字符串的大小 6
printf("%d\n", strlen(p + 1)); //表示的是 剩余字符串的大小,传的b的地址,5
//printf("%d\n", strlen(*p)); //格式错误, 传的字符
//printf("%d\n", strlen(p[0])); //格式错误, 原因同上
printf("%d\n", strlen(&p)); //表示的是 从p的地址处开始 到\0的长度 随机值
printf("%d\n", strlen(&p + 1)); //表示的是 从p的地址的下一个地址开始,到\0的长度, 随机值
printf("%d\n", strlen(&p[0] + 1)); //表示的是 剩余字符串的长度,传的b的地址 5
return 0;
}
我是专注学习的章鱼哥~