前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(4)----数组

C语言(4)----数组

作者头像
Skrrapper
发布2024-06-18 15:30:20
210
发布2024-06-18 15:30:20
举报
文章被收录于专栏:技术分享技术分享

1.数组的概念

数组是⼀组相同类型元素的集合;

• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。

• 数组中存放的多个数据,类型是相同的。

可以把数组理解为一个容器,里面装的是同一颜色的球,但它们上面印着不同的数字。

数组的基本格式是

类型(type) 名称[大小(用数字表示)]

也就是这样:type arr_name[常量值]

类型就是像int char这样的类型指定,指定数组是指整形或是字符型等等

名称是自定义的一个名字,但最好用易于理解的词语来代表名称,这样能使代码更加清晰易懂。

[]中的数字是用来限制数组的大小的,也就是说当其中的数字多大时,那么这个数组就占多大。而[]的作用也就是相当于限制二字。

存放在数组中的值被称为元素,这不禁让我想到了数学中的集合;数组其实就是跟集合类似的概念,它之中的东西都是同一个类型,是不会和其他数组重合的。

而我们创建的时候就可以自行决定数组的类型,大小,元素,名称等这些概念。

我把这种数组称为自定义限制型数组,感觉能较好表达这种数组的含义。(在后续还有的数组是可以不自定义,根据实际情况而决定的)

[]中是空着的时候,那么就是由后面的数来决定容量了。这种数组可以叫做元素制限型数组,也就是由后续元素来控制容量,这样的数组在打印时更易体现出来。

2.数组的初始化(以一维数组为例)

数组有时候也是需要初始化的,初始化的值就将它放在后续的大括号中,分为完全初始化和不完全初始化。

·完全初始化:指的是初始化的值就是它限制的最大值

·不完全初始化:指的是初始化的值是小于它限制的最大值

·错误的初始化:此时初始化的值大于它限制的最大值,那么这个初始化是错误的。

3.数组的类型

我们知道,数组是需要指定元素类型的,也就是类似int这些,但同时数组自身也是有类型的。数组自身的类型就是在元素类型指定的基础上再加上限制范围。也就是这样:

4.数组的下标(以一维数组为例)

C语⾔规定数组是有下标的,下标是从0开始的,也就是说当有a个元素的时候,最后一个元素的下标并不是a,而是a-1。同时,数组的下标就相当于元素的标号,代表这个元素本身。

如果我们想要搜索访问某一个元素,我们就可以使用[]——下标引⽤操作符。

用它能轻松访问到某个元素的下标,只需要在[]中输入某个元素的下标,就能找到这个元素。

对于int arr[10] = {1,2,3,4,5,6,7,8,9,10};这个数组,使用arr[3],访问出来的结果就是4。

5.一维数组和多维数组

数组在维度上可以分为一维数组和多维数组。

·一维数组

它是最基本的数组,格式就是type arr_name[常量值]

·二维数组

它的格式是type arr_name[常量值1][常量值2]

看到这,我认为二维数组又很像数学的里的坐标系。而它在代码中也确实是类似的意思。常量1可以看作x,常量值2可以看作y,[常量值1][常量值2]相当于数学中的(x,y)。这个特点在后续数组的打印中会更明显。

同时,二维数组其实可以看做由一维数组作为元素组成的数组,所以无论几维的数组,它们本质是不变的。这样来看,跟坐标系更像了。

我们注意到,上面介绍数组的各个概念时,都是以一维数组为例,那么二维数组在这些概念上和一维有什么不同呢?

假设我们将二维数组就看作是坐标系,那么常量值1就相当于行,常量值2就相当于列。

从图中我们可以看到,假设arr[3][5],那么代表就是第三行第五列那个元素。

二维数组的初始化

二维数组的初始化和一维稍有些不同。我们需要知道的是,二维数组的初始化的顺序是从左往右,从上往下,相当于打字时的顺序,那么初始化时的元素也就是从最左上角开始打印,然后先往右,到最右边时再从第二行最左边开始打印,所以初始化就是这样:

不完全初始化:

完全初始化:

除此之外,还有特殊的初始化形式。

按照行初始化:当我们需要按照行初始化时,可以在大括号中加入小括号来表示小括号的个数代表行数,小括号中的数字代表打印的东西。

注意:二维数组的初始化可以省略行但不能省略列。因为列用来决定每一行能放几个元素,如果没有列的话,那么行也就不存在了。

二维数组的下标

和一维数组一样,二维数组的下标也是从0开始的,所以行和列都是从0开始。所以第3行第2列指的并不是4而是6。

6.数组的输入和输出

单个数组元素我们可以访问,那么整个数组我们也是可以访问的,很简单,只需要用上循环即可

7.数组的存储

数组在内存中的存储都是连续的,无论几维。

8.C99的变长数组

上面我们认识的数组都是放入的常量值,那么我们可不可以放入变量值呢?这里就给出了C99的变长数组来提供给我们放入变量值。

也就是这样,a和b都是变量。它的实现形式如下

此时我们就可以根据自己需要输入想要的数组大小。变长数组让我们代码更灵活,不被死死固定在不变的常量值内。

但是想要使用变长数组还有很多要点。

首先vs2022不支持变长数组,需要使用例如gcc编译器来实现。

其次由于变长数组的变量性质,只有在程序运行时才能确定数组长度,所以我们不能将其初始化。

变长数组指的是可以由变量来指定,而不是指数组大小可随意变化。一旦确定时就不再变化了。所以变长数组就是相当于在屏幕上再将想要的数组长度输入出来,使得它的适应场合更多。

插入:

内存:计算机处理的数据,都要加载到内存中处理。

查找:分为遍历查找和二分(折半)查找等,遍历查找的意思就是一个元素一个元素的寻找你想要的那个,而二分查找就相当于不断缩小查找的范围,并且缩小的形式是每次缩小一半,这样做每次都能将范围缩小一半,那么效率就提高了很多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数组的概念
  • 2.数组的初始化(以一维数组为例)
  • 3.数组的类型
  • 4.数组的下标(以一维数组为例)
  • 5.一维数组和多维数组
    • ·一维数组
      • ·二维数组
        • 二维数组的初始化
        • 二维数组的下标
    • 6.数组的输入和输出
    • 7.数组的存储
    • 8.C99的变长数组
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档