C 语言数组

2025年7月3日 | 阅读 11 分钟

在 C 语言中,数组被定义为在连续内存位置存储的同类型数据项的集合。数组是 C 语言中的派生数据类型,它可以存储原始类型的数据,如 int、char、double、float 等。它还能够存储派生数据类型的集合,如 指针结构体 等。数组是最简单的数据结构,其中每个数据元素都可以通过其索引号进行随机访问。

C Arrays

C 语言 中,如果我们要存储相似的元素,数组会很有用。例如,如果我们想存储一个学生在 6 门科目中的分数,我们不需要为不同科目的分数定义不同的变量。相反,我们可以定义一个数组,它可以在连续的内存位置存储每门科目的分数。

通过使用数组,我们可以轻松访问元素。只需要几行代码就可以访问数组的元素。

数组的属性

数组包含以下属性

  • 数组的每个元素都属于相同 数据类型 并且大小相同,即 int = 4 字节。
  • 数组的元素存储在连续的内存位置,第一个元素存储在最小的内存位置。
  • 数组的元素可以随机访问,因为我们可以通过给定的基地址和数据元素的大小来计算每个数组元素的地址。

C 数组声明

我们可以用以下方式在 C 语言中声明一个数组。

现在,让我们看一个声明数组的例子。

这里,int 是数据类型,marks 是数组名,5 是数组大小。

C 数组初始化

初始化数组最简单的方法是使用每个元素的索引。我们可以使用索引来初始化数组的每个元素。请看下面的例子。

C 数组示例

让我们举一个例子来说明 C 语言中的数组。

示例

编译并运行

输出

80
60
70
85
75

说明

在此示例中,我们声明了一个大小为 5 的整数数组 marks。每个元素都单独初始化为 80、60、70 等值。使用 for 循环从索引位置 0 到 4 遍历数组,并使用 printf 打印出值。

C 数组声明及初始化示例

让我们举一个例子来说明如何在 C 语言中声明和初始化数组。

示例

编译并运行

输出

20
30
40
50
60

说明

在此示例中,我们定义并初始化了一个包含五个整数元素 mark 的数组,值为 20、30、40、50 和 60。之后,我们使用 for 循环从索引 0 到 4 遍历数组,并使用 printf 打印出每个元素。

访问数组元素

在 C 语言中,数组支持对其元素的随机访问,即我们可以通过给出元素的“位置”(称为索引)来访问数组中的任何元素。索引值从 0 开始,一直到 array_size-1。我们将索引放在方括号 [] 中,后面跟着数组的名称。

C Arrays

语法

它具有以下语法:

其中,索引值在此范围内 - (0 ≤ index ≤ size-1)。

C 访问数组元素的示例

让我们举一个例子来说明如何在 C 语言中访问数组元素。

示例

编译并运行

输出

Accessing array elements:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40

说明

在此示例中,我们包含了标准输入输出库和 main 函数的定义。它有一个大小为 4 的整数数组 numbers,初始值为 10、20、30 和 40。之后,它通过索引从 0 到 3 来打印每个元素。程序通过返回 0 来终止,这表示程序成功执行。

更新数组元素

在 C 语言中,我们可以通过使用数组方括号 [] 和赋值运算符 (=) 来改变索引 i 处的数组元素的值,这与访问元素的方式相同。

语法

它具有以下语法:

C 更新数组元素的示例

让我们举一个例子来说明如何在 C 语言中更新数组元素。

示例

编译并运行

输出

Original value at index 2: 15
Updated value at index 2: 99

说明

在此示例中,我们声明了一个大小为 5 的整数数组 numbers。接下来,它打印索引 2 处的初始值,即 15。之后,它通过赋值 (numbers[2] = 99;) 将索引 2 的值修改为 99,并打印修改后的值。

数组遍历

在 C 语言中,数组遍历是允许我们在特定序列中遍历数组每个元素的操作。在 C 语言数组遍历中,我们使用循环来访问数组的每个元素。

C 数组遍历示例

让我们举一个例子来说明 C 语言中的数组遍历。

示例

编译并运行

输出

Traversing the array:
Element at index 0: 2
Element at index 1: 4
Element at index 2: 6
Element at index 3: 8
Element at index 4: 10

说明

在此示例中,我们初始化了一个大小为 5 的整数数组 numbers,包含元素 2、4、6、8 和 10。它使用一个从索引 0 到 4 的 for 循环来遍历数组。在循环中,使用 printf 输出索引和对应的数组元素。程序通过返回 0 来终止。

数组大小

数组的大小是存储在数组中的元素数量。我们可以使用 sizeof() 运算符来获取大小。

  • sizeof() 运算符返回字节大小。sizeof(arr) 返回数组的总字节数。
  • 数组中的每个元素都是 int 类型,其大小为 4 字节。因此,我们可以通过将总字节数除以单个元素的字节大小来找到数组的大小。

C 数组大小示例

让我们举一个例子来说明 C 语言中的数组大小。

示例

编译并运行

输出

Size of the array: 5

说明

在此示例中,我们声明了一个大小为 5 的整数数组 numbers。之后,通过将数组的总内存大小 (sizeof(numbers)) 除以单个元素的内存大小 (sizeof(numbers[0])) 来计算元素数量。该值赋给变量 size 并打印。

C 中的二维数组

二维数组,或 C 中的 2D 数组,是一个恰好有两个维度的数组。它可以被认为是排列在二维平面上的行和列。

语法

它具有以下语法:

C 中的二维示例

让我们举一个例子来说明 C 语言中的二维数组。

示例

编译并运行

输出

2D Array:
1 2 3 
4 5 6

说明

在此示例中,我们声明了一个大小为 2 行 3 列的二维整数数组 matrix。整数变量 value 被设置为 1。在嵌套的 for 循环中,数组的每个元素都按递增顺序分配了从 1 到 6 的数字。之后,外层循环处理行,内层循环处理列。初始化完成后,使用另一对嵌套循环以列-行顺序打印数组。

C 中的三维数组

在 C 语言中,另一种常见的多维数组类型是三维数组或 3D 数组。3D 数组恰好有三个维度。它被想象成一组 2D 数组堆叠在一起形成第三个维度。

三维数组示例

让我们举一个例子来说明 C 语言中的三维数组。

示例

编译并运行

输出

3D Array Elements:
Block 0:
1 2 3 
4 5 6 

Block 1:
7 8 9 
10 11 12

说明

在此示例中,我们声明了一个 3D 数组 arr[2][2][3],即它有 2 个块,每个块包含 2 行 3 列。将变量 value 设置为 1,并使用三个嵌套的 for 循环来初始化数组的每个元素。外层循环遍历块,中间循环遍历行,最内层循环遍历列。

数组与指针

在 C 语言中,数组和指针直接相互关联,以至于我们可以使用指针来执行数组可以执行的所有操作。数组名是指向数组第一个元素的常量指针,数组被简化为指针并传递给函数。

C 中的数组和指针示例

让我们举一个例子来说明 C 语言中的数组和指针。

示例

编译并运行

输出

Accessing array elements using pointer:
Element 0: 10
Element 1: 20
Element 2: 30
Element 3: 40
Element 4: 50

说明

在此示例中,我们声明了一个大小为 5 的整数数组 numbers。之后,指针 ptr 被赋予数组的基地址,即它指向第一个元素。for 循环从索引 0 迭代到 4,在每次迭代中,通过指针算术访问该索引处的元素:*(ptr + i) 加载数组中第 i 个位置的值。printf 语句打印索引及其对应的值。

将数组传递给函数

在 C 语言中,数组通过指针传递给函数,因为数组名会退化为指向第一个元素的指针。在 C 语言中,有三种常见的方式可以将数组传递给函数:

  • 无大小数组表示法,其中数组作为指针传递,不提及大小。
  • 有大小的数组表示法,其中为了清晰起见,在声明中包含大小,但它仍然作为指针传递。
  • 指针表示法,其中数组被显式地作为指针传递,通常附带其长度。

C 中的数组传递给函数示例

让我们举一个例子来说明如何在 C 语言中将数组传递给函数。

示例

编译并运行

输出

Inside sized_array:
1 2 3 4 
Inside unsized_array:
1 2 3 4 
Inside pointer:
1 2 3 4

说明

在此示例中,我们声明了三个函数,每个函数以三种不同的方式接受数组作为参数:有大小的数组、无大小的数组和指针。在每个函数内部,从 0 到 3 的循环迭代并打印数组元素。在 main 函数内部,声明了一个名为 arr 的数组,它有 4 个元素 {1, 2, 3, 4}。所有三个函数都调用了该数组。

C 数组示例:数组排序

在下面的程序中,我们使用冒泡排序法以降序对数组进行排序。

示例

编译并运行

输出

Printing Sorted Element List ...
101
78
44
34
23
23
12
10
9
7

C 数组的优点

C 数组的几个优点如下:

  • 代码优化:访问数据需要更少的代码。
  • 遍历方便:使用 for 循环,我们可以轻松检索数组的元素。
  • 排序方便:我们只需要几行代码就可以对数组的元素进行排序。
  • 随机访问:我们可以使用数组随机访问任何元素。

C 数组 MCQ

1) C 语言中数组的主要好处是什么?

  1. 它们支持动态内存分配
  2. 它们简化了管理多个相似元素的代码
  3. 它们可以存储各种类型的数据
  4. 它们会自动对元素进行排序
 

答案: b) 它们简化了管理多个相似元素的代码


2) C 数组的第一个元素的默认索引是多少?

  1. 1
  2. -1
  3. 0
  4. 取决于数组的大小
 

答案: c) 0


3) 使用哪个运算符来查找 C 数组的大小?

  1. sizeof
  2. size()
  3. lengthof()
  4. countof()
 

答案: a) sizeof


4) 以下关于 C 语言数组的陈述哪一项是错误的?

  1. 数组在连续的内存位置存储元素
  2. 数组的元素可以随机访问
  3. 数组可以根据需要动态增长
  4. 数组中的所有元素都属于同一类型
 

答案: c) 数组可以根据需要动态增长


5) 以下哪种方法可用于将数组传递给 C 语言函数?

  1. 作为有大小的数组
  2. 作为无大小的数组
  3. 作为指针
  4. 以上全部。
 

答案: d) 以上所有