数组是⼀组相同类型元素的集合;
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的。
可以把数组理解为一个容器,里面装的是同一颜色的球,但它们上面印着不同的数字。
数组的基本格式是
类型(type) 名称[大小(用数字表示)]
也就是这样:type arr_name[常量值]
类型就是像int char这样的类型指定,指定数组是指整形或是字符型等等
名称是自定义的一个名字,但最好用易于理解的词语来代表名称,这样能使代码更加清晰易懂。
[]中的数字是用来限制数组的大小的,也就是说当其中的数字多大时,那么这个数组就占多大。而[]的作用也就是相当于限制二字。
存放在数组中的值被称为元素,这不禁让我想到了数学中的集合;数组其实就是跟集合类似的概念,它之中的东西都是同一个类型,是不会和其他数组重合的。
而我们创建的时候就可以自行决定数组的类型,大小,元素,名称等这些概念。
我把这种数组称为自定义限制型数组,感觉能较好表达这种数组的含义。(在后续还有的数组是可以不自定义,根据实际情况而决定的)
[]中是空着的时候,那么就是由后面的数来决定容量了。这种数组可以叫做元素制限型数组,也就是由后续元素来控制容量,这样的数组在打印时更易体现出来。
数组有时候也是需要初始化的,初始化的值就将它放在后续的大括号中,分为完全初始化和不完全初始化。
·完全初始化:指的是初始化的值就是它限制的最大值
·不完全初始化:指的是初始化的值是小于它限制的最大值
·错误的初始化:此时初始化的值大于它限制的最大值,那么这个初始化是错误的。
我们知道,数组是需要指定元素类型的,也就是类似int这些,但同时数组自身也是有类型的。数组自身的类型就是在元素类型指定的基础上再加上限制范围。也就是这样:
C语⾔规定数组是有下标的,下标是从0开始的,也就是说当有a个元素的时候,最后一个元素的下标并不是a,而是a-1。同时,数组的下标就相当于元素的标号,代表这个元素本身。
如果我们想要搜索访问某一个元素,我们就可以使用[]——下标引⽤操作符。
用它能轻松访问到某个元素的下标,只需要在[]中输入某个元素的下标,就能找到这个元素。
对于int arr[10] = {1,2,3,4,5,6,7,8,9,10};这个数组,使用arr[3],访问出来的结果就是4。
数组在维度上可以分为一维数组和多维数组。
它是最基本的数组,格式就是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。
单个数组元素我们可以访问,那么整个数组我们也是可以访问的,很简单,只需要用上循环即可。
数组在内存中的存储都是连续的,无论几维。
上面我们认识的数组都是放入的常量值,那么我们可不可以放入变量值呢?这里就给出了C99的变长数组来提供给我们放入变量值。
也就是这样,a和b都是变量。它的实现形式如下
此时我们就可以根据自己需要输入想要的数组大小。变长数组让我们代码更灵活,不被死死固定在不变的常量值内。
但是想要使用变长数组还有很多要点。
首先vs2022不支持变长数组,需要使用例如gcc编译器来实现。
其次由于变长数组的变量性质,只有在程序运行时才能确定数组长度,所以我们不能将其初始化。
变长数组指的是可以由变量来指定,而不是指数组大小可随意变化。一旦确定时就不再变化了。所以变长数组就是相当于在屏幕上再将想要的数组长度输入出来,使得它的适应场合更多。
插入:
内存:计算机处理的数据,都要加载到内存中处理。
查找:分为遍历查找和二分(折半)查找等,遍历查找的意思就是一个元素一个元素的寻找你想要的那个,而二分查找就相当于不断缩小查找的范围,并且缩小的形式是每次缩小一半,这样做每次都能将范围缩小一半,那么效率就提高了很多。