中国建筑查询网,深圳谷歌seo培训班,潍坊视频类网站建设,朝阳周边做网站的公司目录 前言解题技巧一、sizeof()练习题1.1 整型数组1.1.1 一维整型数组1.1.2 二维整型数组 1.2 字符数组1.3 字符指针 二、strlen()练习题2.1 字符数组初始化时不包含\02.2 字符数组初始化包含\02.3 字符指针指向字符串常量 总结 前言
最近有点疲倦#xff0c;啊啊啊#xff… 目录 前言解题技巧一、sizeof()练习题1.1 整型数组1.1.1 一维整型数组1.1.2 二维整型数组 1.2 字符数组1.3 字符指针 二、strlen()练习题2.1 字符数组初始化时不包含\02.2 字符数组初始化包含\02.3 字符指针指向字符串常量 总结 前言
最近有点疲倦啊啊啊麻了… 今天写点轻松的东西本篇文章记录关于sizeof()和strlen()的练习题。 解题技巧
1关于sizeof()使用的思考方向 计算数据类型大小例如 sizeof(int)计算地址的大小例如 sizeof(pa)pa为变量计算整个数组的大小例如 sizeof(arr) arr为数组名 2关于strlen()使用的思考方向 首先strlen()计算的是字符串的长度遇到\0才停止计算计算结果不包含\0参数类型为 const char* 字符数组在初始化时不包含\0则计算结果为随机值字符数组在初始化时包含\0则计算结果为字符的个数不包含\0字符串常量自动包含\0 一、sizeof()练习题
1.1 整型数组
1.1.1 一维整型数组
int main()
{int arr[] { 1,2,3,4 };printf(sizeof(arr) %zu\n, sizeof(arr));//sizeof(数组名),计算的是整个数组的大小 4*4 16printf(sizeof(arr0) %zu\n, sizeof(arr 0));//计算的是首元素地址的大小printf(sizeof(*arr) %zu\n, sizeof(*arr));//sizeof(*arr) sizeof(arr[0]) 计算首元素的大小printf(sizeof(arr1) %zu\n, sizeof(arr 1));//sizeof(arr1) sizeof(arr[1]) 计算第二个元素地址的大小printf(sizeof(arr[1]) %zu\n, sizeof(arr[1]));//计算第二个元素的大小printf(sizeof(arr) %zu\n, sizeof(arr));//计算整个数组地址的大小printf(sizeof(*arr) %zu\n, sizeof(*arr));//sizeof(*arr) sizeof(arr) 计算整个数组的大小printf(sizeof(arr1) %zu\n, sizeof(arr 1));//sizeof(arr1) 计算跳过整个数组后的地址的大小本质计算地址大小printf(sizeof(arr[0]) %zu\n, sizeof(arr[0]));//计算首元素地址的大小printf(sizeof(arr[0]1) %zu\n, sizeof(arr[0] 1));//sizeof(arr[0]1) sizeof(arr[1]) 计算的是第二个元素地址的大小return 0;
}32位机器输出结果 64位机器输出结果 1.1.2 二维整型数组
int main()
{int arr[3][4] { 0 };printf(sizeof(arr) %zu\n, sizeof(arr));//计算二维数组的大小 3*4*sizeof(int) 3*4*4 48printf(sizeof(arr[0][0]) %zu\n, sizeof(arr[0][0]));//计算元素类型的大小 sizeof(0) sizeof(int) 4printf(sizeof(arr[0]) %zu\n, sizeof(arr[0]));//arr[0]表示的是第一行的数组名计算的是第一行的大小 4*sizeof(int) 4*4 16printf(sizeof(arr[0]1) %zu\n, sizeof(arr[0] 1));//arr[0] 表示第一行的数组名 arr[0]1 表示的是第一行第二个元素的地址 arr[0][1]//4/8printf(sizeof(*(arr[0]1)) %zu\n, sizeof(*(arr[0] 1)));// arr[0]1 - arr[0][1] *(arr[0]1) 0 计算元素类型的大小 4printf(sizeof(arr1) %zu\n, sizeof(arr 1));//arr1此时 arr表示首元素地址第一行的地址 arr1表示第二行的地址//计算地址大小 4/8printf(sizeof(*(arr1)) %zu\n, sizeof(*(arr 1)));//对第二行的地址进行解引用计算的是第二行数组的大小 16printf(sizeof(arr[0]1) %zu\n, sizeof(arr[0] 1));//arr[0] 取出的是整个一维数组的地址 arr[0]1表示的是第二行的地址//计算地址的大小 4/8printf(sizeof(*(arr[0]1)) %zu\n, sizeof(*(arr[0] 1)));//arr[0] 1 表示第二行的地址 对第二行进行解引用计算的是一维数组的大小 //16printf(sizeof(*arr) %zu\n, sizeof(*arr));//arr表示首元素地址即第一行的地址 对一行地址解引用//计算一维数组的大小 16printf(sizeof(arr[3]) %zu\n, sizeof(arr[3]));//arr[3] - arr[0] 计算一维数组的大小//16return 0;
}
32位机器输出结果 64位机器输出结果 1.2 字符数组
int main()
{char str[] { a,b,c,d,e,f };printf(sizeof(str) %zu\n, sizeof(str));//计算整个数组大小printf(sizeof(str0) %zu\n, sizeof(str 0));//计算首元素地址大小printf(sizeof(*str) %zu\n, sizeof(*str));//*str str[0] a 计算元素的类型大小 sizeof(char)printf(sizeof(str[1]) %zu\n, sizeof(str[1]));//计算元素的类型大小 sizeof(char)printf(sizeof(str) %zu\n, sizeof(str));//str整个数组的地址 计算的是地址的大小printf(sizeof(str1) %zu\n, sizeof(str 1));//计算的是地址大小printf(sizeof(str[0]1) %zu\n, sizeof(str[0] 1));//计算第二个元素的地址大小return 0;
}32位机器输出结果 64位机器输出结果 1.3 字符指针
int main()
{const char* p abcdef;printf(sizeof(p) %zu\n, sizeof(p));//计算地址大小printf(sizeof(p1) %zu\n, sizeof(p 1));//计算地址大小printf(sizeof(*p) %zu\n, sizeof(*p));//计算元素类型大小printf(sizeof(p[0]) %zu\n, sizeof(p[0]));//计算元素类型大小printf(sizeof(p) %zu\n, sizeof(p));//计算地址大小printf(sizeof(p1) %zu\n, sizeof(p 1));//计算地址大小printf(sizeof(p[0]1) %zu\n, sizeof(p[0] 1));//计算地址大小return 0;
}32位机器输出结果 64位机器输出结果 二、strlen()练习题
2.1 字符数组初始化时不包含\0
#includestring.h
int main()
{char str[] { a,b,c,d,e,f };printf(strlen(str) %zu\n, strlen(str));//随机值 值6printf(strlen(str0) %zu\n, strlen(str 0));//随机值 值6//printf(strlen(*str) %zu\n, strlen(*str));//程序错误 *str a 97 //printf(strlen(str[1]) %zu\n, strlen(str[1]));//程序错误 str[1] b 98printf(strlen(str) %zu\n, strlen(str));//str的类型为 char(*)[6] 与strlen()的参数类型不相同会有警告//随机值 值6 str整个数组的地址但是 str的值和str的值相同但类型不相同printf(strlen(str1) %zu\n, strlen(str 1));//随机值-6return 0;
}输出运行结果 2.2 字符数组初始化包含\0
int main()
{char str[] abcdef;printf(strlen(str) %zu\n, strlen(str));//值为6printf(strlen(str0) %zu\n, strlen(str 0));//值为6//printf(strlen(*str) %zu\n, strlen(*str));//程序错误 *str a 97 //printf(strlen(str[1]) %zu\n, strlen(str[1]));//程序错误 str[1] b 98printf(strlen(str) %zu\n, strlen(str));//str的类型为 char(*)[6] 与strlen()的参数类型不相同会有警告//值为6 str整个数组的地址但是 str的值和str的值相同但类型不相同printf(strlen(str1) %zu\n, strlen(str 1));//随机值return 0;
}输出运行结果 2.3 字符指针指向字符串常量
int main()
{const char* p abcdef;printf(strlen(p) %zu\n, strlen(p));//值为6printf(strlen(p1) %zu\n, strlen(p 1));//值为5//printf(strlen(*p) %zu\n, strlen(*p));//printf(strlen(p[0]) %zu\n, strlen(p[0]));//程序错误printf(strlen(p) %zu\n, strlen(p));//随机值printf(strlen(p1) %zu\n, strlen(p 1));//随机值printf(strlen(p[0]1) %zu\n, strlen(p[0] 1));//值为5return 0;
}输出运行结果 总结
sizeof()计算内存空间大小 sizeof(单独数组名)计算数组大小 sizeof(地址) 计算地址大小 sizeof(类型)计算类型大小。 strlen()计算字符串长度