从最浅层剖析C语言————第四节(深入了解二维数组存储以及实现二分查找)

news2024/9/22 11:27:20

目录

1. 前情提要

2. sizeof计算数组元素个数

3. 二维数组的创建及其初始化

3.1 二维数组的概念

3.2 二维数组的创建

3.3 二维数组的初始化

4. 二维数组的使用

4.1 二维数组的下标

4.2 二维数组在内存之中的存储

4.3 C99中的变长数组


1. 前情提要

前面一篇博客中,我们深入了解了一维数组的各种方面的知识

这一节博客中,我们将会深入了解二维数组在内存之中是如何存储的,后面还会布置两道数组的练习题,让大家了解今天所讲的数组内容,以及明白如何使用二分查找这种思维方法来获取便利

2. sizeof计算数组元素个数

我们经常想要知道数组的元素个数,那C语言中是否有计算数组中元素个数的方法呢?

那就是使用sizeof

C语言中sizeof是一个关键字,是可以计算类型或者变量大小的,在数组之中,sizeof就可以计算数组所占内存空间的大小

如图,我们一开始创建了一个一维数组,数组里面的十个元素全部初始化为零

然后使用sizeof计算数组里面元素所占内存大小,由于数组里面的元素都是int类型,一个int类型是占四个字节,所以这个数组所占的内存大小就是四十个字节

如果后面除以对应类型所占的字节空间,那么我们就成功计算出了数组里面所含元素的多少了

3. 二维数组的创建及其初始化

3.1 二维数组的概念

在我们前面所举出的例子之中,所使用的数组都是一维数组

一维,二维,三维其实大家在生活中都有过一定的了解,一维空间,二维空间等等

数组里面一维数组和二维数组的命名其实也是一样的道理,二维数组其实就是将一维数组当作了一个数组元素来看待,一个二维数组就是由多个一维数组所构成的

同理,当多个二维数组组合到一起,实际上就变成了三维数组,多维数组的概念以此类推即可理解了,除了一维数组,其余数组都被称为多维数组

3.2 二维数组的创建

与一维数组的语法创建基本类似

type arr_name[常量值1][常量值2];

大家可以看出来,与一维数组的创建唯一不同的只是需要布置两个常量值而已

如下图:

其中第一个常量值表示数组有几行,第二个常量值表示数组有几列(一行有多少个元素)

其他与一维数组含义一样

3.3 二维数组的初始化

二维数组与一维数组一样,都是通过大括号来进行初始化的

我们会发现,在初始化的时候,我们依旧是与一维数组同样的方法,那最后初始化结束之后的数组元素会是怎么样的情况呢???

大家可以根据下面的两个图理解一下,分别对应了上面所创建的两个二维数组

根据所写的arr[3][5],所以创建出来的数组就是属于三行五列的二维数组,而我们初始化的时候,第一个写的数值对应的就是第一行的第一个元素,然后就是第一行的第二个元素,以此类推

先初始化完成第一行的数组,实际上也就是先初始化完成一个一维数组,接下来继续去初始化下一个一维数组

那这样大家就会感觉很麻烦了,因为如果二维数组有几十行及时列的话,我们想要对数组里面哪一行哪一列的元素操作将会非常繁琐,那么有没有对应的方法可以让初始化更精确呢???

我们可以使用一个逗号,表示结束了对第一行一维数组的初始化,从而就可以对后面几行的数组从头开始初始化数值了

数组内部各个元素初始化情况就会根据逗号的隔开,使得我们可以对于每一行分别从头开始进行初始化,并不需要像原本一样要从头到尾全部初始化,其实在后面的阶段,大家都是习惯先将数组里面各个元素全部初始化为0

4. 二维数组的使用

4.1 二维数组的下标

在我们刚刚展示的各个数组内部元素分布图,其实就标好了行号和列号,大家会发现这些序号都是从零开始的,与我们之前所展示的一维数组的下标只是多了一列罢了

根据我们上面的行号和列号,我们就可以确认一个元素的下标了,然后通过下标引用操作符来进行访问即可

这样我们同样可以在二维数组众多元素中,精确访问到我们所需要的元素了

4.2 二维数组在内存之中的存储

我们之前打印出了一维数组在内存之中的地址,发现一维数组之中的每一个元素在内存之中都是连续存放的,那二维数组呢???

我们可以看得出来,这里面的每一个元素之间的地址相差的都是4,因为我们所创建的都是int类型的元素,所以每一个元素占据的空间自然也是4个字节

从这里可以看出

超重点:在二维数组之中,数组里面的每一个元素也是连续存放的!!!

4.3 C99中的变长数组

在C99标准出现之前,C语言创建数组的时候,数组大小的指定,都是只能使用常量表达式的

而在C99的标准中,给了一个变长数组的特性,允许我们使用变量指定数组的大小

如上图,我们就在数组里面填上了一个变量n

因为我们创建数组的时候,我们暂时不知道需要多大的数组空间,如果盲目创建,就大大浪费了我们的内存空间,放置一个变量就很方便的解决了这一点,这就是变长数组

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

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

相关文章

经纬恒润天津工厂荣获2024年第一批天津市数字化车间

在数字化转型的浪潮中,天津市工业与信息化局本月正式公布了2024年第一批数字化车间和智能工厂名单,经纬恒润天津工厂凭借其卓越的创新能力与先进的智能制造技术成功入选,荣膺"天津市数字化车间"称号,标志着经纬恒润在数…

SOMEIP_ETS_081: ClientServiceActivate_Server_reboot

测试目的: 验证设备(DUT)是否能够检测到其服务器的重启,并通过重新建立通信来适当地做出反应。 描述 本测试用例旨在检查DUT在检测到服务器重启后,是否能够重新建立TCP连接,并重新订阅事件组&#xff0c…

联想凌拓产品生命周期管理系统(PLM)解决方案

PLM(Product Lifecycle Management)产品生命周期管理系统其内部集合了 CAD、CAE、CAM、PDM 等设计类产品,是主要的研发设计类软件产品。PLM 系统有助于缩短产品开发周期、实时同步产品信息、降低风险和成本、提升产品质量、加强和供应商的协作…

苹果11月推出新款M4 Mac:Mac mini设计焕新 MacBook Pro仅例行更新

据外媒 MacRumors 报道,苹果公司计划在 11 月推出首批 M4 Mac,这一时间表与去年相似,当时苹果公司在同样的时间点中宣布推出搭载 M3 芯片的 MacBook Pro。 ▲ 苹果公司在 2023 年 10 月 31 日推出的 M3 MacBook Pro 同时根据古尔曼爆料称苹果…

023集—— @字符详解——C#学习笔记

1、是取消字符串中的转意符。 比如不加的字符串,"\\a\n" C#会解释成一个\和一个a再加一个换行, 如果加了, "\\a\n“ C#会解释成两个\加一个a加一个\加一个n。 在路径中写单斜杠会报错(“\”做转义符用&#xff0…

中锂天源卡车电瓶:绿色能源驱动未来物流

随着我国新能源汽车产业的飞速发展,作为新能源汽车核心部件的锂电池产业也得到了前所未有的关注。在这其中,中锂天源作为一家专业从事锂电池研发、生产、销售的企业,凭借其卓越的科技创新和产品质量,逐渐成为了卡车电瓶领域的一股…

独立站运营中容易陷入的误区

近年来,越来越多的跨境电商卖家选择独立站作为他们品牌的出海模式,但有些卖家花了很多时间精力在建站和投放广告上,却依旧无法获得一个好的效果,究其原因,可能是你在运营独立站的时候搞错了重点,本文整理了…

Kettle发送邮件功能如何配置以实现自动化?

kettle发送邮件如何设置?Kettle配置发送邮件的方法? Kettle发送邮件功能能够帮助用户在数据处理过程中自动发送电子邮件,极大地提高了工作效率。AokSend将详细介绍如何配置Kettle发送邮件功能,以实现自动化操作。 Kettle发送邮件…

PDF文档处理技巧:如何编辑 PDF文档

如果没有合适的工具,PDF 编辑起来会很棘手。虽然有些工具价格昂贵,但一些免费工具也可以完成这项工作。以下是您需要获得和了解的内容。 如果您曾经尝试编辑可移植文档格式文件 (PDF),那么您几乎肯定会发现它比编辑 Microsoft Word 或 Googl…

STL—stack/queue/priority_queue_/deque

STL—stack和queue 之前我们学了string和vector和list,并且完成了它们的模拟实现,他们都是很重要的容器。 这次要学习的stack和queue不是容器,是——容器适配器 stack和queue 1. stack 1.1 stack的介绍 stack 的文档介绍 翻译: stack是…

AI人数智能统计监测摄像头

随着人工智能技术的不断发展,AI人数智能统计监测摄像头 在各个领域得到了广泛应用。这种摄像头结合了图像识别技术和智能算法,旨在实现对人群数量的准确统计和监测。通过高清晰度的摄像头捕捉到场景中的人群图像,并通过人工智能技术进行快速准…

手机删除的短信怎么恢复?学会这4招,短信恢复不是梦!

手机短信在今天作为我们沟通的重要桥梁,承载着无数珍贵的瞬间与关键信息。然而,不小心误删或者系统的故障,可能会把重要短信删除了。手机删除的短信怎么恢复?您是否还在焦虑又无助地寻找答案? 看这里!其实…

电路分析 ---- 反相比例器

1 基本反向比例器 分析过程 根据虚断可知经过运算放大器正负输入端的电流为0,即 i P i N 0 i_{P}i_{N}0 iP​iN​0故有 u P 0 u_{P}0 uP​0,根据虚短可知 u P u N 0 u_{P}u_{N}0 uP​uN​0 i R u I − u N R u I R i_{R}\cfrac{u_{I}-u_{N}}{R}\…

【C语言必学知识点六】自定义类型——内存对齐与位段

内存对齐与位段 导读一、内存对齐1.1 对齐规则1.1.1 内存对齐中的名词1.1.2 内存对齐规则的理解1.1.3 宏offsetof 1.2 内存对齐存在的原因1.3 修改默认对齐数 二、位段2.1 什么是位段2.1.1 个人理解 2.2 位段的内存分配2.2.1 VS中的位段内存分配2.2.2 VS位段分配方式的验证2.2.…

评价决策类——层次分析法+数学建模+实战分析

目录 一、前言 二、历年题型分析 2.1 常用算法归纳 2.1.1 优化类算法 2.1.2 预测类算法 2.1.3 评价决策类 2.1.4 NP-hard类 2.2 评价类模型求解 2.2.1 层次分析法(AHP) 2.2.2 多指标评价法(MCDA) 2.2.3 算法区别 三、层…

浅谈人工智能之基于AutoGen Studio+语聚AI API构建智能体技能

浅谈人工智能之基于AutoGen Studio语聚AI API构建智能体技能 使用AutoGen Studio与语聚AI API:高效自动化代码生成与语言处理的融合实践 概述 在快速迭代的软件开发环境中,高效、准确的代码生成和语言处理能力成为了提升开发效率的关键因素。本文档旨…

SuperMap GIS基础产品FAQ集锦(20240902)

一、SuperMap iDesktopX 问题1:请问一下这个重建指数,怎么理解呢? 11.1.1 【解决办法】重建指数是用于设置根节点合并次数,系统会根据数据自动计算一个数值n,即模型根节点将进行n次合并处理。 问题2:11…

Datawhale X 李宏毅苹果书AI夏令营深度学习详解入门Task02

本文了解深度学习详解中的线性模型 本文了解深度学习详解中的线性模型将围绕梯度下降优化、线性模型的局限性、改进模型以及深度学习模型等关键要点展开讨论。 一、梯度下降优化 梯度下降是深度学习中常用的优化算法,它通过不断调整模型的参数,使得损失函…

【优质源码】3D多人在线游戏,前端ThreeJS,后端NodeJS

3D多人在线游戏 【源码】3D多人在线游戏源码,前端ThreeJS,后端NodeJS,完整源码。 游戏画面 启动方法 先启动服务器端。 在目录,3D-multi-player-main\3D-multi-player-main\nodeapps\blockland 中,运行&#xff1a…

讯飞星火版「Her」正式上线!成立仅16月的无问芯穹完成近5亿元A轮融资|AI日报

文章推荐 8款国内外免费AI生成视频工具对比实测!我们真的可以做到“一人搞定一部影视作品“吗? AI真“卷出天际”!我国发布全球首个月球专业大模型;0代码可做游戏,谷歌发布世界首个AI游戏引擎|AI日报 今…