C进阶:征服指针之指针与数组强化笔试题练习(2)

简介: C进阶:征服指针之指针与数组强化笔试题练习(2)

🐲一.关于 strlen 函数与数组、指针的综合笔试题

🐋T1.

1. //字符数组
2. char arr[] = {'a','b','c','d','e','f'};
3. 1.    printf("%d\n", strlen(arr));
4. 2.    printf("%d\n", strlen(arr+0));
5. 3.    printf("%d\n", strlen(*arr));
6. 4.    printf("%d\n", strlen(arr[1]));
7. 5.    printf("%d\n", strlen(&arr));
8. 6.    printf("%d\n", strlen(&arr+1));
9. 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

打印结果:

🦄 T2.

1. char arr[] = "abcdef";
2. 1.    printf("%d\n", strlen(arr));
3. 2.    printf("%d\n", strlen(arr+0));
4. 3.    printf("%d\n", strlen(*arr));
5. 4.    printf("%d\n", strlen(arr[1]));
6. 5.    printf("%d\n", strlen(&arr));
7. 6.    printf("%d\n", strlen(&arr+1));
8. 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

打印结果:


🐯T3.

1. char *p = "abcdef";
2. 1.    printf("%d\n", strlen(p));
3. 2.    printf("%d\n", strlen(p+1));
4. 3.    printf("%d\n", strlen(*p));
5. 4.    printf("%d\n", strlen(p[0]));
6. 5.    printf("%d\n", strlen(&p));
7. 6.    printf("%d\n", strlen(&p+1));
8. 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


🐬🐳本篇文章中若有错误,或是小伙伴们有什么建议,欢迎指出呀。😆😁

🦞🕊️如果小伙伴们觉得还不错的话,可否支持支持博主呢😊👻

🪶🐿️你们的支持真的对我很重要,是博主更新的动力🥰🤩

🤖🐲谢谢你的阅读🙂😀


目录
相关文章
|
2月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
39 3
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
60 4
|
2月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
51 2
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
151 13
|
3月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
41 0
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
155 4