数组的概念
数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组;
数组中存放的是1个或者多个数据,但是数组元素个数不能为0;
数组中存放的每一个数据,类型必须是相同的;
一维数组的定义
要使用数组,就要先创建数组,那么数组应该如何创建呢?实际上数组的创建和我们之前学习过的变量的定义差不多,下面让我们用一张图来解释
图中我们大概可以知道数组的创建格式:类型说明符 数组名[ 常量/常量表达式 ]
类型说明符:char int float double等等。
数组名:一般根据实际情况定义有意义的名字。
[ ]:里面的常量值决定来数组的大小,这个值根据需求来指定就⾏。
例如:我要定义一个数组来存储一个班50个人的成绩
一维数组的初始化
数组的初始化有两种:完全初始化和不完全初始化
数组的类型
数组也是有类型的,例如:上图中数组a的类型就是int[3],表示a是一个由3个int类型元素组成的数组。
a的数组类型是:int[3]
b的数组类型是:char[2]
c的数组类型是:double[5]
一维数组的使用
引用数组名的表示形式:数组名[下标]
C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1
标就相当于数组元素的编号。
例如数组:int a[10]={1,2,3,4,5,6,7,8,9,10};
数组a中每个元素对应的下标如下
所以当我们想要打印数字5时,那么我们就可以使用a[4]
数组元素的输入和打印
数组中的元素也可以根据我们的需要自己去输入,可以利用循环来输入每个元素的数据
一维数组在内存中的存储
如果我们要继续深⼊研究数组,我们最好能了解⼀下数组在内存中的存储,下面让我们来打印数组中每个元素的地址
从图中的输出结果我们可以看到,数组a中的元素的地址是按照下标的顺序逐渐递增的,并且每两个相邻的元素之间的地址相差4(因为一个整型是4个字节),所以我们可以得出结论: 数组的元素在内存中是连续存放的。
注意:十六进制是:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
计算数组中的元素个数
如果我们在遍历数组的时候不知道数组的元素个数,那么该怎么办呢?这里就要用到一个c语言中的一个关键词:sizeof。它可以计算类型或者变量大小,当然,我们也可以用来计算数组的大小
这里的测试结果是40,这是因为整型数组a中每个元素的类型相同并且都是4个字节,所以10个元素就是40,那么我们居既然知道了一个整型是4个字节,我们只需要用40来除以4就可以得到数组中的元素个数了
这样我们就可以计算出数组a中的元素个数了。
二维数组的创建
前面的内容是一维数组的基本概念,那么如果我们把一维数组当成一个数组的元素,这个时候就变成了二维数组,当然,如果把二维数组当成一个数组的元素,那就是三维数组,二维数组及以上的数组就叫多维数组。
定义二维数组的例子如下
解释:
3:意思是这个数组有3行。
5:意思是这个数组有5列。
int:是数组中每个元素的类型。
a:是数组的名字。
所以我们可以知道二维数组的定义格式:类型 数组名[常量1][常量2]
二维数组的初始化
其实二维数组的很多地方与一维数组有类似的地方,初始化也是使用大括号来完成的
二维数组的不完全初始化:
二维数组的完全初始化:
按照行进行初始化:
二维数组初始化的时候可以省略行,但是注意不能省略列哦!
二维数组的使用
二维数组的使用也是通过下标来引用的,在c语言中,二维数组的行和列都是从0开始的
图中左边的绿色的数字代表行,蓝色数字代表列,都是从0开始的,如果我们想要打印二维数组中的数字7,那么就是第二行第四列,也就是a[2][4]。
二维数组的输入输出
现在我们知道了二维数组的创建和引用,那么如果我想要在二维数组中输入我想要的数据,应该怎么实现呢?如果我还想要把二维数组中的所有元素输出,又怎样才能方便快捷呢?让我们以上面的数组a[3][5]为例,借助循环来实现
二维数组在内存中存储
像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素的地址的
从图中我们可以看出来,二维数组中的相邻元素之间相差4,跨行位置处的两个元素也是相差4(如 a[0][4] 和 a[1][0] 之间也是相差4个字节),所以二维数组中的元素也是按照升序来连续存放的。
关于数组的内容就讲这么多啦!第一次手打这么长的文章,真心不易,因为刚踏入c语言的大门不久,如果有错误的地方欢迎各位小伙伴来指出,最后都看到这里了,给个点再走吧