本篇文章是接上篇文章的,上篇文章链接:http://t.csdn.cn/RogqL
目录
一.关于 strlen 函数与数组、指针的综合笔试题
T1.
T2.
T3.
//字符数组
char arr[] = {'a','b','c','d','e','f'};
1. printf("%d\n", strlen(arr));
2. printf("%d\n", strlen(arr+0));
3. printf("%d\n", strlen(*arr));
4. printf("%d\n", strlen(arr[1]));
5. printf("%d\n", strlen(&arr));
6. printf("%d\n", strlen(&arr+1));
7. printf("%d\n", strlen(&arr[0]+1));
Q1:
arr 既不在 sizeof 内部,也不是&arr,所以这里的数组名表示数组首元素地址,因为 strlen 是遇到 '\0' 才停下,而该数组中并没有 '\0' ,所以就不知道 strlen 会遇到 '\0' ;
答案:随机值
Q2:
arr+0 仍表示数组首元素的地址,所以同上;
答案: '\0'
Q3 :
* arr 表示的是数组的首元素 ‘ a ' ,它是一个字符不是字符串,所以就会报错,程序运行时就会挂掉;
答案:error
Q4:
arr[1] 表示的时数组下标为1的元素 ' b ',与上题同理;
答案:error
Q5:
&arr 取出的是整个数组的地址,但是它的值和数组首元素地址相同,所以和第一题同理;
答案:随机值
Q6:
&arr+1 跳过整个数组,但还是不知道什么时候会遇到 '\0' ,所以还是随机值;但是这题的随机值和第五题的随机值有联系,他们相减等于数组的元素个数 6 ( 指针相减得到的是两个指针之间的元素个数 );
答案:随机值 - 6
Q7:
&a[0] +1 表示的是 'b' 的地址 ,同理也是个随机值,和 strlen (arr) 存在着关系;
答案:随机值 -1
打印结果:
char arr[] = "abcdef";
1. printf("%d\n", strlen(arr));
2. printf("%d\n", strlen(arr+0));
3. printf("%d\n", strlen(*arr));
4. printf("%d\n", strlen(arr[1]));
5. printf("%d\n", strlen(&arr));
6. printf("%d\n", strlen(&arr+1));
7. printf("%d\n", strlen(&arr[0]+1));
Q1:
因为这个数组中是个字符串,字符串结束的标志是 '\0' ,所以这个数组有7个元素,最后一个元素是 '\0' ,strlen 遇到 '\0' 就结束,所以这题的答案是 7;
答案:7
Q2 :
arr+0 是数组首元素的地址,同上;
答案 :6
Q3,Q4:
*arr 和 arr[1] 都表示的是字符,不是字符串,所以是 error;
答案:error
Q5 :
&arr 取出的是整个数组的地址,但是它的值和数组首元素地址相同,所以同Q1;
答案:6
Q6:
&arr +1 跳过整个数组(包括 '\0' ),此时又不知道什么时候会遇到 '\0' ,所以是随机值;
答案:随机值
Q7:
&arr[0] +1 ,即数组下标为1的元素 'b' ,从这里往后走,最终会遇到 '\0' ;
答案:5
打印结果:
char *p = "abcdef";
1. printf("%d\n", strlen(p));
2. printf("%d\n", strlen(p+1));
3. printf("%d\n", strlen(*p));
4. printf("%d\n", strlen(p[0]));
5. printf("%d\n", strlen(&p));
6. printf("%d\n", strlen(&p+1));
7. printf("%d\n", strlen(&p[0]+1));
Q1:
p 指向的是字符串的首地址,所以答案是6;
答案:6
Q2:
指针 p 的类型是 char* ,指针类型表示指针的步长,所以 p +1 就跳过一个字节,来到 'b' ,strlen
再往后走还是会遇到 '\0' ;
答案:5
Q3, Q4 :
*p 和 p[0] 是同一个值,都是字符串的首元素,是个字符;
答案:error
Q5 :
p 是一个指针变量,他也有一个地址,但我们并不知道地址是多少,所以也就不知道什么时候会遇到 '\0' ;
答案:随机值
Q6:
与上同理,即使 加了个1 ,我们仍然不知道什么时候会遇到 '\0' ;
答案:随机值
Q7:
&p[0]+1 表示的是字符串中 'b' 的地址,从这里strlen 向后走,还是会遇到 '\0 ' ,且:
strlen(p) - strlen (&p[0] +1 ) =1 ;
详细图解与 T2的Q7 差不多 ,在这里就里就不重复了;
答案:5
打印结果:
好了,关于sizeof 和 strlen 与指针,数组综合的笔试题到这里就已经全部结束了;
有关 sizeof 的笔试题:http://t.csdn.cn/RogqL
本篇文章中若有错误,或是小伙伴们有什么建议,欢迎指出呀。
️如果小伙伴们觉得还不错的话,可否支持支持博主呢
️你们的支持真的对我很重要,是博主更新的动力
谢谢你的阅读