C语言指针指针和数组笔试题(必看)

news2024/10/6 8:30:15

前言:

        前面介绍了指针的大体内容,如果接下来能够把这些代码的含义搞得清清楚楚,那么你就是代码king!

一维数组:

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a+0));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(a[1]));
printf("%d\n",sizeof(&a));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));

这些大家做做,答案应该都是什么?

        咱们可以谈论讨论:

        注:sizeof(arr)可以计算arr整个数组的大小!!

1、不必多说答案是16(一个整型数据占4个字节)

2、sizeof(a+0)这里表示的是第一个元素的地址的大小为4

3、sizeof(*a),a是一个指针,里面放的是一个地址(首元素的),解引用就相当于第一个元素,所以这里相当于计算一个元素大小为4个字节。

4、sizeof(a+1)表示首元素地址加一,也就是相当于第二个元素的地址,大小为4个字节。

5、sizeof(a[1])表示第2个元素的大小,大小是4个字节

6、sizeof(&a)表示取出a整个数组的地址,但是在a中保存的是首元素的地址,只有加减的时候才会跳过整个数组的大小,大小为4个字节。(不要被迷惑

7、sizeof(*&a)表示整个数组的地址放在指针中,也是一个整形指针大小为4个字节。

8、sizeof(&a+1)表示取出a整个数组的大小,然后向后跳过整个数组的大小,指向的是第a+4个元素的地址,大小是4个字节。

9、sizeof(&a[0])表示的是a[0]的地址,大小是4个字节。

10、sizoef(&a[0]+1)表示的是a[0]的地址,向后访问一个整型的大小地址,大小为4个字节。

字符数组:

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

直接开始分析!

注:strlen计算的是数组里面元素的个数!!

1、sizeof(arr)直接计算的是整个数组的大小,大小为6个字节

2、sizeof(arr+0)表示的是第1个元素的地址,地址的话是4个字节(千万注意表示的不是第1个字符

3、sizeof(*arr)表示的是一个字符指针,里面放的是第一个字符的地址并且解引用,就是第一个字符,大小为1个字节。

4、sizeof(arr[1])表示的是第二个字符,大小为1个字节。

5、sizeof(&arr)表示的是取出整个数组的地址,大小为4个字节。

6、sizeof(&arr+1)表示的是向后跳过整个数组的大小(6个字节)后的地址,大小为4个字节。

7、sizeof(&arr[0]+1)表示的是第二个元素的地址,大小为4个字节。

8、strlen(arr)表示的是计算整个字符串数组的长度,大小为随机值(注意里面没有\0,strlen读取到\0才终止

9、strlen(arr+0)表示的是从第一个字符开始往后读取,直到遇到\0停止,大小为随机值。

10、strlen(*arr),相当于strlen('a')。大小为随机值。

11、strlen(arr[1]),相当于strlen('a'),大小同样为随价值。

12、strlen(&arr)相当于&arr是取出整个数组的地址,但是里面存的还是首元素的地址,所以还是从首元素开始往后读,直到遇到\0停止,还是随机值。

13、strlen(&arr+1)表示的是跳过整个数组大小的长度,开始往后读遇到'\0'停止,还是随机值。

14、strlen(&arr[0]+1)表示的是从第二个字符开始往后读,遇到'\0'停止。

字符串:

        

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

   最后再看一组:

1、sizeof(arr) 整个数组的大小,结果为7。(注意字符串中结尾自带'\0')。

2、sizeof(arr+0)   首元素的地址,结果为4。

3、sizeof(*arr)首元素,大小为1。

4、sizeof(arr[1])第二个元素,大小为1。

5、sizeof(&arr)整个数组是地址,大小为4.

6、sizeof(&arr+1)跳过整个数组后的地址,大小为4

7、sizeof(&arr[0]+1)第二个元素的地址,大小为4.

8、strlen(arr),从第一个元素开始往后读,直到遇到'\0'停止,结果为6.

9、strlen(arr+0),和上一个一样的,大小为6。

10、strlen(*arr),相当于strlen(arr[0]),大小为随机值。

11、strlen(arr[1]),大小为随机值。

12、strlen(&arr),大小为6。

13、strlen(&arr+1),结果为随机值。

14、strlen(&arr[0]+1),是从第二个元素开始访问,直到遇到'\0'停止,结果为5。

熏帝们,到这还没有结束,等下期继续!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐系统学习笔记(三)

swing召回通道 Q:假如重合的用户是一个小圈子:在一个群里,毫无关联的笔记也会被同时交互 solve:降低小圈子权重--------------swing的主要目的------------给用户加权 相似度: a是人工参数,overlap降低小…

基于Python+KNN神经网络手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 手写数字识别是机器学习领域的一个基础问题,也是许多实际应用的基石,如邮政编码识别、银行表…

STM32F1之SPI通信·软件SPI代码编写

目录 1. 简介 2. 硬件电路 移位示意图 3. SPI时序基本单元 3.1 起始条件 3.2 终止条件 3.3 交换一个字节(模式0) 3.4 交换一个字节(模式1) 3.5 交换一个字节(模式2) 3.6 交换一个字节&a…

网络信息安全

目录 引言 网络信息安全的基本概念 定义 主要目标 网络信息安全的范围 主要威胁 恶意软件 黑客攻击 拒绝服务攻击 社交工程 内部威胁 常用技术和防护措施 加密技术 防火墙 入侵检测和防御系统 访问控制 多因素认证 安全审计和监控 安全培训和意识提升 未来发…

panic对defer语句的执行的影响

1.主线程中的panic会直接导致所有正在运行的go协程无法执行,还会导致声明在它之后的defer语句无法执行。 package mainimport ("fmt""time" )func main() {defer fmt.Println("defer1") //声明在panic之前的defer会执行go func() {defer fmt.Pri…

npm介绍、常用命令详解以及什么是全局目录

目录 npm介绍、常用命令详解以及什么是全局目录一、介绍npm的主要功能npm仓库npm的配置npm的版本控制 二、命令1. npm init: 初始化一个新的Node.js项目&#xff0c;创建package.json文件。package.json是一个描述项目信息和依赖关系的文件。2. npm install <package_name&g…

Java入门基础学习笔记42——常用API

API&#xff08;全称&#xff1a;Application Programming Interface&#xff1a;应用程序编程接口&#xff09; 就是Java自己写好的程序&#xff0c;给程序员调用&#xff0c;方便完成一些功能的。 为什么要学别人写好的程序&#xff1f; 不要重复造轮子。 开发效率高。 面…

MySQL主从复制(一):主备一致

MySQL主备的基本原理 如图所示就是基本的主备切换流程&#xff1a; 在状态1中&#xff0c; 客户端的读写都直接访问节点A&#xff0c; 而节点B是A的备库&#xff0c; 只是将A的更新都同步过来&#xff0c; 到本地执行。 这样可以保持节点B和A的数据是相同的。 当需要切换的时候…

基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 已经完成了登录界面和主界面&#xff0c;本篇将完善主界面的管理员录入和编辑功能&#xff0c;事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑 首先还是介绍一下…

uniapp中使用mockjs模拟接口测试总结(swiper轮播图示例)

完整总结下在uni-app中如何使用Mock.js模拟接口测试&#xff0c;这在后台接口未就绪的情况下非常有用。同时也给出个首页swiper轮播图的mock接口使用。网上的文章都不太完整&#xff0c;这里总结下完整的使用示例&#xff0c;同时也支持h5和小程序平台&#xff0c;分享给需要的…

基于Arduino的电梯超载报警系统

企鹅&#xff1a;2583550535 项目和论文都有 第1章 绪论.............................................................................................................................. 1 1.1 项目背景及意义........................................................…

【教学类-56-03】数感训练——数字03(寻找自己的学号数字,15-20个)

背景需求&#xff1a; 在实际操作中&#xff0c;孩子们把数字当做了自己的学好&#xff0c;这个提示老师可以给每位孩子做一份“学号数感训练 【教学类-56-02】数感训练——数字02&#xff08;控制指定数字出现的数量&#xff09;-CSDN博客文章浏览阅读341次&#xff0c;点赞…

TypeScript(持续更新中...)

1.TypeScript是什么&#xff1f; TypeScript是javaScript的超集。 2.使用TypeScript 1&#xff09;全局安装nodejs 2&#xff09;安装TypeScript编译器 npm i -g typescript 3.编译ts文件 //注意&#xff1a;需要在ts文件同级目录执行此命令&#xff0c;否则会报找不到…

AI爆文写作:关注热点,提前埋伏好关键词,吃系统的热点推荐,吃搜索流量,让你的文章直接爆了!

做内容&#xff0c;要对热点敏感。 小米汽车的发布会时间&#xff0c;我们是不是提前就知道&#xff0c;发布会前&#xff0c;大家最关注的就是价格。 你看这个相关关键词搜索&#xff0c;10W太多了。 我看到有博主在发布会前&#xff0c;埋伏了一篇&#xff0c;公众号也有推…

FunSound: 基于FunASR-onnx 的高精度离线转写

​ 基于funasr的高精度离线语音转写网页 www.funsound.cn 精度和速度表现不错&#xff0c;提供给大家免费测试 ​

UniApp 2.0可视化开发工具:引领前端开发新纪元

一、引言 在移动互联网迅猛发展的今天&#xff0c;移动应用开发已经成为前端开发的重要方向之一。为了简化移动应用开发流程&#xff0c;提高开发效率&#xff0c;各大开发平台不断推出新的工具和框架。UniApp作为一款跨平台的移动应用开发框架&#xff0c;自诞生以来就备受开…

如何通过软件SPI读写W25Q64

STM32F1之SPI通信软件SPI代码编写-CSDN博客 目录 1. W25Qxx系列简介 2. W25Q64硬件电路 3. W25Q64框图 4. Flash操作注意事项 5. 代码编写 5.1 初始化 5.2 W25Q64读取ID号 5.3 W25Q64写使能 5.4 W25Q64等待忙 5.5 W25Q64页编程 5.6 W25Q64扇区擦除&#x…

YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在YOLOv5的GFLOPs计算量中&#xff0c;卷积占了其中大多数的比列&#xff0c;为了减少计算量&#xff0c;研究人员提出了用EfficientNet代替b…

PS —— 精修图像

PS —— 精修图像 修复污点修复画笔工具修复画笔工具 美白滤镜去杂锐化加杂减淡和锐化工具 我觉得今天这篇博客&#xff0c;无论是男同胞还是女同胞&#xff0c;都要熟练掌握&#xff08;哈哈哈哈…) 今天我们来学习如何精修图像&#xff0c;精修图像一般分为几步——修复&…

32 位和 64 位 Linux 上 C 语言的整数大小的分析

在 Linux 系统上进行 C 语言编程时&#xff0c;理解整数大小在 32 位和 64 位系统上的区别是开发高效、可靠程序的基础。本文将深入探讨整数在这两种架构下的大小差异及其原因&#xff0c;并介绍其对程序的影响。 整数类型及其大小 C 语言中主要的整数类型包括 char、short、i…