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

目录
相关文章
|
13天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
38 4
|
2月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
40 6
|
2月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
2月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
2月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
2月前
|
存储 数据管理 编译器
揭秘C语言:高效数据管理之数组
揭秘C语言:高效数据管理之数组
|
2月前
|
C语言 C++
保姆式教学C语言——数组
保姆式教学C语言——数组
19 0
保姆式教学C语言——数组
|
2月前
|
C语言
C语言数组
C语言数组
21 0
|
2月前
|
存储 C语言 索引
c语言回顾-数组(全网最详细,哈哈哈) (下)
c语言回顾-数组(全网最详细,哈哈哈) (下)
46 0
|
2月前
|
存储 编译器 C语言
c语言回顾-数组(全网最详细,哈哈哈)(上)
c语言回顾-数组(全网最详细,哈哈哈)(上)
57 0