字符数组暴力刷题

编程入门 行业动态 更新时间:2024-10-22 10:37:12

字符<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组暴力刷题"/>

字符数组暴力刷题

【核心知识】

先复习一下核心知识:

1. 以下2种情况数组名表示整个数组

sizeof(数组名)

&数组名

其他情况均表示首元素地址

2. 任何形式的地址的大小相同

3. strlen求的是字符串的长度,统计的是在字符串中\0之前出现的字符的个数

part1

char arr[] = {'a','b','c','d','e','f'}; 
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));

后面就是解析啦,先做再往后看

----------------------------------

printf("%d\n", sizeof(arr)); 

sizeof(数组名)表示整个数组的大小,即6

printf("%d\n", sizeof(arr+0)); 

并非sizeof(数组名)的形式,则arr表示首元素地址,所以sizeof(arr+0)表示的就是首元素地址的大小,即4或8(取决于是x86还是x64的环境)

printf("%d\n", sizeof(*arr));  

arr表示首元素地址,解引用后为首元素,所以大小为1

printf("%d\n", sizeof(arr[1])); 

arr[1]表示第二个元素,等价于*(arr+1),所以大小为1

printf("%d\n", sizeof(&arr));  

&arr表示整个数组的地址,只要是地址大小都是4或8

printf("%d\n", sizeof(&arr+1)); 

&arr表示整个数组的地址,&arr+1表示的是跳过整个数组后,下一个位置的地址,也是4或8

printf("%d\n", sizeof(&arr[0]+1));

&arr[0]表示首元素地址,题目等价于sizeof(arr+1),即第二个元素的地址,同样4或8

part2

char arr[] = {'a','b','c','d','e','f'};
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));

后面就是解析啦,先做再往后看

----------------------------------

printf("%d\n", strlen(arr)); 

strlen统计的是在字符串中\0之前出现的字符的个数,此数组不包含\0,所以会生成随机值

printf("%d\n", strlen(arr+0));

arr+0依旧是首元素地址,与第一题相同,还是生成随机值

printf("%d\n", strlen(*arr));

*arr表示的是首元素,'a',传进去的是ASCII码值97,而如果直接访问97就是非法访问

printf("%d\n", strlen(arr[1]));

arr[1]表示第二个元素,所以也会出错,类似上一问

printf("%d\n", strlen(&arr));

&arr表示整个数组的地址,属于数组指针char (*) [6],而strlen的参数类型是字符指针char*,所以可能会报警告,但是因为此数组没有'\0',所以还是生成随机值

printf("%d\n", strlen(&arr+1));

此问与上一问类似,不过这是指向整个数组的下一个位置的地址,与上一问类似,也是随机值

printf("%d\n", strlen(&arr[0]+1));

&arr[0]+1表示第二个元素的地址,但是没有'\0',依旧是随机值

part3

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));

后面就是解析啦,先做再往后看

----------------------------------

printf("%d\n", sizeof(arr));

整个数组的大小,包括'\0',结果为7

printf("%d\n", sizeof(arr+0));

表示首元素地址,地址的大小4或8

printf("%d\n", sizeof(*arr));

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

part4

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));

后面就是解析啦,先做再往后看

----------------------------------

printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0)); 

传首地址,找'\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));

整个数组后一个位置的地址,生成随机值

printf("%d\n", strlen(&arr[0]+1));

第二个元素的地址,所以返回值为5

更多推荐

字符数组暴力刷题

本文发布于:2023-12-04 11:44:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660804.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   字符   暴力

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!