c语言数组的概念与使用

简介: c语言数组的概念与使用

数组的概念


数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组;

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

数组中存放的每一个数据,类型必须是相同的;


一维数组的定义

要使用数组,就要先创建数组,那么数组应该如何创建呢?实际上数组的创建和我们之前学习过的变量的定义差不多,下面让我们用一张图来解释

44da759e62d842bcb3da224202f0d083.png

图中我们大概可以知道数组的创建格式:类型说明符  数组名[ 常量/常量表达式 ]

类型说明符:char   int  float  double等等。

数组名:一般根据实际情况定义有意义的名字。

[ ]:里面的常量值决定来数组的大小,这个值根据需求来指定就⾏。

例如:我要定义一个数组来存储一个班50个人的成绩

6ac18b441c59460d9f5693014443c892.png

一维数组的初始化

数组的初始化有两种:完全初始化和不完全初始化

70e2b26087f747a3a1981cd3373afb57.png

数组的类型

数组也是有类型的,例如:上图中数组a的类型就是int[3],表示a是一个由3个int类型元素组成的数组。

1d55bcb49018451c82061d6c6906f41f.png

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中每个元素对应的下标如下

53a3f8d5d122422bae175eb3611d0150.png

所以当我们想要打印数字5时,那么我们就可以使用a[4]

34e476f9f3b8484394602601afd94f58.png

数组元素的输入和打印

数组中的元素也可以根据我们的需要自己去输入,可以利用循环来输入每个元素的数据

9a419fb9b3984913949db692d172250d.png

一维数组在内存中的存储

如果我们要继续深⼊研究数组,我们最好能了解⼀下数组在内存中的存储,下面让我们来打印数组中每个元素的地址

24ca6db15aae438cbd766133e055e7b1.png

从图中的输出结果我们可以看到,数组a中的元素的地址是按照下标的顺序逐渐递增的,并且每两个相邻的元素之间的地址相差4(因为一个整型是4个字节),所以我们可以得出结论: 数组的元素在内存中是连续存放的。

注意:十六进制是:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。


计算数组中的元素个数

如果我们在遍历数组的时候不知道数组的元素个数,那么该怎么办呢?这里就要用到一个c语言中的一个关键词:sizeof。它可以计算类型或者变量大小,当然,我们也可以用来计算数组的大小

0cdd4d014b514b878d6b1dc371eeee09.png

这里的测试结果是40,这是因为整型数组a中每个元素的类型相同并且都是4个字节,所以10个元素就是40,那么我们居既然知道了一个整型是4个字节,我们只需要用40来除以4就可以得到数组中的元素个数了

3fec32fb48c448b88fc96eb4a51f513d.png

这样我们就可以计算出数组a中的元素个数了。


二维数组的创建

前面的内容是一维数组的基本概念,那么如果我们把一维数组当成一个数组的元素,这个时候就变成了二维数组,当然,如果把二维数组当成一个数组的元素,那就是三维数组,二维数组及以上的数组就叫多维数组。

df68d2a608974af6b8c9f2a5299fb495.png

定义二维数组的例子如下

49b8899e93494ed99a7a9c1f865eb283.png

解释:

3:意思是这个数组有3行。

5:意思是这个数组有5列

int:是数组中每个元素的类型。

a:是数组的名字。

所以我们可以知道二维数组的定义格式:类型 数组名[常量1][常量2]


二维数组的初始化

其实二维数组的很多地方与一维数组有类似的地方,初始化也是使用大括号来完成的

二维数组的不完全初始化:

c9ec5de87ed84a4d8718c45fa0bae22e.png

12ae96faf75e442598d695f82e07eb22.png

二维数组的完全初始化:

f63f80dc39f94aab81744a80921bef63.png

8f202ecd133c4325a1d67fe8b7b7438b.png

按照行进行初始化:

16836967670c4257ab1ddb1da6c561f0.png

d93791510a6c424087d7900ce339d3ef.png

二维数组初始化的时候可以省略行,但是注意不能省略列哦!

ed430ba448e14400aea7a4bc93bb5dde.png

4c4ab16799ca4d65b91377c3af9e7170.png

二维数组的使用

二维数组的使用也是通过下标来引用的,在c语言中,二维数组的行和列都是从0开始的

f63f80dc39f94aab81744a80921bef63.png

bb42fed8c4eb4590a7cef49e0c00c7d2.png

图中左边的绿色的数字代表行,蓝色数字代表列,都是从0开始的,如果我们想要打印二维数组中的数字7,那么就是第二行第四列,也就是a[2][4]。

e32d1e8b6d564375ac0d6809b70daa59.png

二维数组的输入输出

现在我们知道了二维数组的创建和引用,那么如果我想要在二维数组中输入我想要的数据,应该怎么实现呢?如果我还想要把二维数组中的所有元素输出,又怎样才能方便快捷呢?让我们以上面的数组a[3][5]为例,借助循环来实现

0e3c31fafbfc4b50a7b07c9f90148ea6.png


二维数组在内存中存储

像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素的地址的

ee6593ddd9ad42bfb61f97c5f4cc8be5.png

从图中我们可以看出来,二维数组中的相邻元素之间相差4,跨行位置处的两个元素也是相差4(如   a[0][4]   和   a[1][0]   之间也是相差4个字节),所以二维数组中的元素也是按照升序来连续存放的。

6ee8621ad52948e6a1f13cd7fcd3e563.png

关于数组的内容就讲这么多啦!第一次手打这么长的文章,真心不易,因为刚踏入c语言的大门不久,如果有错误的地方欢迎各位小伙伴来指出,最后都看到这里了,给个点再走吧

853f6d6eef1140b48e06945ee7d07314.png

目录
相关文章
TU^
|
1天前
|
存储 编译器 程序员
C语言之数组
C语言之数组
TU^
6 1
|
1天前
|
存储 程序员 编译器
【C语言基础】:数组
【C语言基础】:数组
|
9天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
12 1
|
9天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
9 1
|
9天前
|
C语言
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
7 0
|
9天前
|
C语言
C语言学习记录——找数组中的鞍点
C语言学习记录——找数组中的鞍点
3 0
|
9天前
|
C语言
C语言学习记录——鹏哥二分法查找数组中元素 复习整理
C语言学习记录——鹏哥二分法查找数组中元素 复习整理
6 0
|
10天前
|
算法 C语言
C语言——oj刷题——字符串左旋和轮转数组
C语言——oj刷题——字符串左旋和轮转数组
|
10天前
|
C语言
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
|
10天前
|
存储 C语言 索引
C语言数组:从入门到进阶
C语言数组:从入门到进阶
15 0