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

简介: C语言(4)----数组

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编译器来实现。

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

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

插入:

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

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

目录
相关文章
|
1天前
|
存储 编译器 C语言
C语言数组详解
C语言数组详解
9 1
|
4天前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
3天前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
3天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
4天前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
3天前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
4天前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
10 2
|
4天前
|
C语言
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
9 1
|
4天前
|
Serverless C语言
【C语言】:对(一维)数组与指针的深入理解(1)
【C语言】:对(一维)数组与指针的深入理解(1)
8 1
|
7天前
|
C语言
C语言----数组----二分查找
C语言----数组----二分查找