定义整型数组_C语言基础-数组怎么用

90bb951329b3774f296e64524cf8c657.png

到目前为止,我们了解到C语言中可以使用整型,浮点型和字符型的数据类型来描述我们人类世界的各种数据,但是这些还远远不够……

我们在IOT领域经常会遇到这样一个数据使用场景:某天的固定时间内,会有多台(我们假定100台)IOT终端上报某种类型的信息(我们假定是0-100°范围内的温度探测值)。现在知道了基本的数据类型,选择unsigned char类型存储一台终端上报的温度值就可以。但是如果这个设备是100台呢?下面的定义方式貌似可行:

2e4146eb371d43d51859e03d68cd82c0.png

但是要是这个数量变得更多,比如1000台的时候呢?咱们肯定会问,C语言中就没有一种类似容器一样的方案,可以通过某种机制去查找到指定的存放位置,从而节省定义数据需要的代码行数呢?答案是有的,而且这种C语言的数据类型就是我们前面曾经提到的-数组类型

预备知识-索引

索引,英文名index。通俗的讲,就是容器内每个数据的位置标签。用户可以通过这些不同的位置标签,找到对应位置存储的数据。

63d40577592982f6ebe8e79fde357862.png

索引0对应数据11,索引3对应数据44。在C语言中,所有的索引均从0开始计数,逐次加1。

一维数组

以上面100台IOT设备上报温度值场景为例,一维数组的定义方式如下:

8d5194632234f5a45cbccfadee8a8ada.png
  1. 注1:数组长度100根据实际100个设备而定。索引值从0到99(100-1)共100个。
  2. 注2:数组内的成员称为数组元素,为相同数据类型。在本例中都为unsigned char类型。

数组元素的引用

有了索引,我们可以找到100台设备中任何一台设备的对应值。比如:

41c7e31065af2bca0f12f09a2fb85c66.png

数组的初始化

  • 部分初始化

unsigned char SensorTemp[100] = {1,10,11,22};

注: 因为初始化值只有4个,只能完成对索引0,1,2,3四个元素进行赋值

  • 逐个初始化

SensorTemp[0] = 1;

SensorTemp[1] = 10;

SensorTemp[2] = 11;

SensorTemp[4] = 22;

  • 全部初始化

unsigned char SensorTemp[4] = {1,10,11,22};

如果出现如下未给定数组长度情况,则认为数组SensorTemp的长度为给定数据的个数:

unsigned char SensorTemp[ ] = {1,10,11,22,33};

二维数组

解决了100台设备数据存储的问题,我们再提一个新的问题:如果需要我们上午和下午各存储一次,如何实现呢?

“再创建一个新的100个元素的数组不就解决了嘛”,很多朋友可能会提出这样的方案。没错,但是当每天的采集点很多呢,难道还要继续这样做么?

f42a9ce10e69b726670ffaaa36090db2.png

其实不需要的。C语言在数组的维度上进行了扩展,即可以定义高维度数组。对于该问题,我们可以考虑将01-06的采样时间点作为一个新的维度,重新定义一个二维的数组来解决这个新的问题。

79293e853b329ceb0b54984e46f8740c.png

具体这个二维数组里,数据的存放和二维数组中各个数据元素的含义如下图所示:

0a61dbb16fb7db7d761ac5fdb742a3d5.png

具体来看,二维数组的元素引用方式依然采用索引方式,只不过这次是两个索引值。对于二维数组,可以将它想象成为一个矩阵形式,矩阵的行数由第一维长度决定,矩阵的列数由第二维长度决定。同样,二维矩阵的初始化与一维矩阵类似,不再详述。

字符数组和字符串

上面的例子中,我们存储的都是具体的整型数据,但是往往在生活中,存储的数据也不乏字符串。比如经典的“Hello world”。有人会说,那我一个char一个char的输出不是也可以么?当然可以!但是,与本章中提出的第一个问题类似,当字符越来越多的时候,你还考虑一个char一个char的打印么?

既然整型都可以使用数组技术,那么字符型呢?答案是肯定的。

03f23cb18ee14566302737bddad1162f.png
  • :我们需要重点关注最后的0字符。
  • 这个字符占用数组元素一个索引计数
  • 这个字符要么初始化的时候主动赋值,要么系统添加,所以一定要注意定义的字符数组长度
  • 这个字符的作用:C语言中,认定该字符为字符串结束的标志

后记

C语言中的重头戏,指针和指针数组,我们还是往后放放,这么早提指针,还是容易有心理压力。

其实对于数组,只要记住:第一,数组就是个数据存储容器;第二,里面的元素都一样的数据类型;第三,不管一维还是高维,拿索引检索就好

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

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

相关文章

找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。针对top K类问题,通常比较好的方案是分治Trie树/hash小顶堆(就是上面提到的最小堆),即先将数据集…

crowd counting_[crowd_counting]-SFCN-CVPR2019amp;amp;GCC dataset

1.Contribution(1)主要是提出了基于GTA5的GCC数据集数据集下载地址:https://gjy3035.github.io/GCC-CL/​gjy3035.github.io(2)提出了在如何在GCC上train,然后在传统的通用数据集上test的迁移学习方案&…

代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清

本文首发于:行者AI 在工作中会遇到批量给图片添加文字,随机码等需求,当数据码数量较大时,UI的工作量就会非常大,这时候我们可以用python来帮我们提高工作效率。1. 需求分析我们有这样一张图片,我们需要将一…

hash地址_redis中的hash扩容、渐进式rehash过程

背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二…

是什么牌子_水晶项链什么牌子好

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以免费收到最新内容了。每天都有分享,完全是免费订阅,请放心关注! …

什么是机器人的五点校正法_机器人校正方法

机器人校正方法【专利说明】机器人校正方法[0001]本申请案主张于2012年9月18日申请之美国临时专利申请案第61/702,377号的优先权,所述专利申请案的揭示完整结合于此以供参考。技术领域[0002]本发明涉及一种工件加工,尤其涉及一种用于工件加工…

stn算子_深度学习常用算子(二)

1、Tensor维度变换1)Flatten作用:将输入tensor中从start_axis维度到end_axis维度合并为1维2)Reshape作用:将输入Tensor描述转换为新的shape3)FreespaceExtract作用:将h维变成1,其他维度不变,从而完成对h的采样&#xf…

iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验

英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID:web_qdkf)由于图像是Web上最流行也是必不可少的内容类型之一,因此网站上的图片页面加载时间很容易成为一个问题。即使进行了适当的优化&…

ubuntu18安装python3.6.8_ubuntu 18.04 + Python 3.6.8 更换软件安装源

国外的开源项目开展的是如火如荼,我们国内的当然也不甘落后。为了更好的玩转 Python,我使用了 ubuntu Linux 来作为开发环境。但是由于国内网络的限制,访问国外的一些软件源的时候,速度比较慢,这时我们需要更换成国内的…

springframework报错_应对报错信息的必杀技!

今天遇到了一个错误,一般的错误提示会很明显,一看就知道是什么问题。今天遇到的这个说实话真的不好找原因,一般在这种情况下该怎么解决呢?分享下我的思路吧,不一定是最好的,至少有用。直接上图吧&#xff0…

电脑运行卡顿怎么处理_【众点学】电脑运行PS卡顿?可能是你的虚拟内存没设置好!...

不少小伙伴都遇到过这样的烦恼明明自己的电脑拥有大内存PS用着用着就卡顿了经过教体君的仔(bai)细(du)研(yi)究(xia)发现原来电脑的 虚拟内存 只有2G当我们用大型软件或玩大型游戏电脑越用越卡时该怎么做?今天【众点学】我们一起来看看Win7和Win10系统下分别如何设置…

线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...

往期文章为什么阿里Java规约要求谨慎使用SimpleDateFormathttps://www.toutiao.com/i6696127929048367629/为什么我强烈推荐你用枚举来实现单例模式https://www.toutiao.com/i6696861933687013901/为什么不要在MySQL中使用UTF-8编码方式https://www.toutiao.com/i6697966437727…

css html 双面打印_从 Linux 命令行进行打印 | Linux 中国

导读:在 Linux 命令行进行打印的内容比单单一个 lp 命令多得多,让我们来看一些可用选项。       本文字数:4305,阅读时长大约:5分钟https://linux.cn/article-13012-1.html作者:Sandra Henry-stocker译…

python保存快捷键是什么_python常用快捷键

最重要的快捷键1. ctrlshiftA:万能命令行2. shift两次:查看资源文件新建工程第一步操作1. module设置把空包分层去掉,compact empty middle package2. 设置当前的工程是utf-8,设置的Editor-->File Encodings-->全部改成utf-8,注释1. ctrl/:单行注释光标操作1. ctrlaltent…

服务器内存超限问题_服务器内存爆满最佳处置方案

内存爆满截图:分析:内存持续飙升,应该是有大量内存一直没有释放,考虑僵尸对象,僵尸进程,最简单的就是重启服务器,但是就无法找到罪魁祸首了。验证:top命令查看活跃进程的资源使用情况…

js map对象遍历_何时使用 Map 来代替变通的 JS 对象

JS 普通对象 {key: value} 用于存放结构化数据。但有一件事我觉得很烦:对象键必须是字符串(或很少使用的 symbol)。如果将数字用作键会怎样?在这种情况下不会有错误:const names { 1: One, 2: Two,};Object.keys(names); // > [1, 2]JS 会隐式地将…

mysql怎么显示结果窗口_mysql8中窗口函数

在以前的MySQL版本中是没有窗口函数的,直到MySQL8.0才引入了窗口函数。窗口函数是对查询中的每一条记录执行一个计算,并且这个计算结果是用与该条记录相关的多条记录得到的。1.窗口函数与聚合函数窗口函数与聚合函数很像,他们都是在一组记录而…

python控制台输入字符串作为参数_Python-如何将字符串传递到subprocess.Popen(使用stdin参数)?...

小编典典Popen.communicate() 说明文件:请注意,如果要将数据发送到进程的stdin,则需要使用stdin PIPE创建Popen对象。同样,要在结果元组中获得除None以外的任何内容,你还需要提供stdout PIPE和/或stderr PIPE。替换…

log4jdbc mysql_[简单]log4jdbc-log4j2配置简记_MySQL

log4jdbc-log4j2,就不多说了,不了解的可以谷歌,附上log4jdbc-log4j2的官方链接:https://code.google.com/p/log4jdbc-log4j2/ ,上面有非常详细的介绍。简单的贴下配置文件,其他的见附件:databas…

vb实时错误6 溢出_java内存溢出系列(6): Out of swap space?

本文是java内存溢出系列第6小篇。JVM启动参数指定了最大内存限制。如 -Xmx 以及相关的其他启动参数. 假若JVM使用的内存总量超过可用的物理内存, 操作系统就会用到虚拟内存。错误信息 java.lang.OutOfMemoryError: Out of swap space? 表明, 交换空间(swap space,虚拟内存) 不…