C语言数组和指针笔试题(三)(一定要看)

简介: C语言数组和指针笔试题(三)(一定要看)

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接

🐒🐒🐒个人主页

🥸🥸🥸C语言

🐿️🐿️🐿️C语言例题

🐣🐓🏀python

字符数组四

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

例题1

char arr[] = "abcdef";
printf("%d\n", strlen(arr));

这里的arr是代表的整个字符串,由于字符串中的字符分别是’a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘\0’,而strlen计算几个是除掉\0,因此结果为6

例题2

char arr[] = "abcdef";
printf("%d\n", strlen(arr+0));

arr+0=&arr[0],&arr[0]是第一个字符a的地址,因此strlen会从第一个字符a开始寻找\0,所以结果是6,因为数组的储存地址是连续的,所以先取寻找数组中的\0在哪,如果数组中没有\0,就会越界查找,知道找到\0

例题3

char arr[] = "abcdef";
printf("%d\n", strlen(*arr));

*arr是对arr首元素地址进行解引用是字符a,并没有\0,所以会报错

例题4

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

这里其实和例题3是一样的,arr[1]是字符b,没有\0,所以会报错

例题5

char arr[] = "abcdef";
printf("%d\n", strlen(&arr));

&arr是取的整个数组的地址,也就是首元素地址,&arr和&arr[0]的不同在之前有讲过,这里就不说了,因此strlen会从第一个字符a查找,直到找到\0,结果是6

例题6

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

&arr+1虽然是跳过了整个数组,但其实质仍然是一个数组地址,不知道\0在哪所以是一个随机值

例题7

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

&arr[0]+1=&arr[1],是从第二个字符’b’的地址开始向后找,因此结果就应该比从整个元素的地址开始向后找少一(因为b是在a之后),所以结果是5

结果

因为例题3和例题4无法打印,所以就打印的其他例题

字符数组五

char *p = "abcdef";
1:printf("%d\n", sizeof(p));
2:printf("%d\n", sizeof(p+1));
3:printf("%d\n", sizeof(*p));
4:printf("%d\n", sizeof(p[0]));
5:printf("%d\n", sizeof(&p));
6:printf("%d\n", sizeof(&p+1));
7:printf("%d\n", sizeof(&p[0]+1));

例题1

char *p = "abcdef";
printf("%d\n", sizeof(p));

p是一个指针变量储存的是字符串的地址,所以sizeof§是求一个地址的大小,结果是4或者8

例题2

char *p = "abcdef";
printf("%d\n", sizeof(p+1));

p+1是跳过整个字符串的地址,但还是地址,所以结果仍然是4或者8

例题3

char *p = "abcdef";
printf("%d\n", sizeof(*p));

这里的 * p是对字符串中的字符’a’地址解引用,所以 *p=‘a’,由于字符是char类型,所以sizeof(*p)结果是1

调试结果如下

例题4

char *p = "abcdef";
printf("%d\n", sizeof(p[0]));

p[0]是字符串中的第一个字符a,因为是char类型,所以结果是1

例题5

char *p = "abcdef";
printf("%d\n", sizeof(&p));

&p是取出指针变量p的地址,因为是一个地址所以结果是4或者8

例题6

char *p = "abcdef";
printf("%d\n", sizeof(&p+1));

&p+1仍然是一个地址,所以结果还是4或者8

例题7

char *p = "abcdef";
printf("%d\n", sizeof(&p[0]+1));

&p[0]+1是取字符串第二个字符b的地址,所以结果为4或者8

结果

字符数组六

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

例题1

char *p = "abcdef";
printf("%d\n", strlen(p));

p是指针变量取的是字符串的地址,等于字符a的地址,strlen§就是从字符a开始寻找\0,所以结果为6

例题2

char *p = "abcdef";
printf("%d\n", strlen(p+1));

这里的p是数组首元素地址,p+1是跳过数组的一个元素所以p+1=&p[1],因此strlen是从字符’b’的地址开始寻找\0,所以结果是5

例题3

char *p = "abcdef";
printf("%d\n", strlen(*p));

*p是对字符’a’地址解引用,就是字符a,没有\0所以会报错

例题4

char *p = "abcdef";
printf("%d\n", strlen(p[0]));

p[0]是字符串中的第一个元素a,没有\0,所以会报错

例题5

char *p = "abcdef";
printf("%d\n", strlen(&p));

&p是取指针变量的地址,注意p是字符串的地址,但是&p就不是字符串的地址,所以&p中我们不知道他的地址是什么样的,结果是一个随机值

例题6

char *p = "abcdef";
printf("%d\n", strlen(&p+1));

&p+1是跳过p的地址,因为地址中不知道\0在哪,所以是一个随机值

例题7

char *p = "abcdef";
printf("%d\n", strlen(&p[0]+1));

&p[0]+1=&p[1],是第二这个字符’b’的地址,因此strlen是从b开始寻找\0,所以结果是5

结果

目录
相关文章
|
6天前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
16 0
一文彻底搞明白C语言的数组
|
6天前
|
存储 人工智能 Java
一文轻松拿捏C语言的指针的基础使用
本文介绍了C语言中的指针概念,包括直接访问和间接访问内存的方式、指针变量的定义与使用、取址运算符`&`和取值运算符`*`的应用,帮助读者深入理解指针这一C语言的核心概念。君志所向,一往无前!
16 0
|
3月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
128 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
3月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
253 9
|
3月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
73 7
|
3月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
214 6
|
4月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
104 5
|
4月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
10月前
|
C语言
C语言---指针进阶
C语言---指针进阶
62 0
|
C语言
C语言指针进阶(下)
C语言指针进阶(下)
72 1

热门文章

最新文章