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

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

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

插入:

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

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

目录
相关文章
|
8月前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
370 0
一文彻底搞明白C语言的数组
|
10月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
732 6
|
11月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
319 5
|
11月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
11月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
11月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
11月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
209 4
|
12月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
198 6
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
455 9
|
12月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。