当前位置: 首页 > news >正文

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

目录

  • 字符数组四
    • 例题1
    • 例题2
    • 例题3
    • 例题4
    • 例题5
    • 例题6
    • 例题7
  • 结果
  • 字符数组五
  • 例题1
  • 例题2
  • 例题3
  • 例题4
  • 例题5
  • 例题6
  • 例题7
  • 结果
  • 字符数组六
    • 例题1
    • 例题2
    • 例题3
    • 例题4
    • 例题5
    • 例题6
    • 例题7
  • 结果

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒个人主页
🥸🥸🥸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

结果

在这里插入图片描述

http://www.lryc.cn/news/173655.html

相关文章:

  • leetcode11 盛水最多的容器
  • 进入数据结构的世界
  • stm32之看门狗
  • 纤维蛋白单体(FM)介绍
  • 知识图谱实战导论:从什么是KG到LLM与KG/DB的结合实战
  • 第5章 会话与会话技术
  • IDEA2023新UI回退老UI
  • ElasticSearch(三)
  • 【LinkedHashMap】146. LRU 缓存
  • Opencv-python去图标与水印方案实践
  • 自己写过比较蠢的代码:从失败中学习的经验
  • C语言 cortex-A7核 点LED灯 (附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】)
  • LABVIEW 实战案例1--温度报警系统
  • 【力扣】292. Nim 游戏
  • IAP固件升级分几步?(Qt上位机、)
  • Otter改造 增加springboot模块和HTTP调用功能
  • Vue.js vs React:哪一个更适合你的项目?
  • Debian环境下搭建STM32开发环境
  • 如何防止商业秘密泄露(洞察眼MIT系统商业机密防泄密解决方案)
  • 题目 1062: 二级C语言-公约公倍
  • 【Leetcode】148.排序链表
  • 用《斗破苍穹》的视角打开C#多线程开发1(斗帝之路)
  • 图像处理与计算机视觉--第三章-颜色与纹理分析-6问
  • vue重修002
  • [PowerQuery] PowerAutoMate 刷新PowerBI 数据
  • C语言中各种接口标准
  • vscode常用插件
  • 代码随想录算法训练营day60|84.柱状图中最大的矩形 |完结撒花~
  • 在 android 上使用 adb client
  • 竞赛选题 基于深度学习的视频多目标跟踪实现