Skip to content

1 数组

在 C 语言中,数组是一组具有相同数据类型的变量集合。这些变量按照顺序排列,并且可以通过一个共同的名称来访问它们。

2 定义

在 C 语言中,我们可以使用以下方式来定义一个数组:

c
int array[5];

上述代码表示我们定义了一个包含 5 个整型元素的数组,它们被分配在内存中连续的位置上。我们也可以给数组初始化赋值:

c
int array[5] = {1, 2, 3, 4, 5};

当然,我们也可以只给部分元素赋初值:

c
int array[5] = {1, 2};

其余元素会自动初始化为 0 么? 答案是 不一定。

当定义一个数组时,只对其中一部分元素进行了初始化,只有被显式初始化的元素才会被赋予具体的值,而其他未初始化的元素则会保持为随机值。这些随机值的大小和分布是不可预测的,因此未初始化的数组元素可能是 0,也可能是其他随机值。这是因为在程序开始执行之前,内存中已经包含了各种随机值。这些值可能是上一次程序运行时留下的残留值,也可能是其他程序使用同一内存空间时留下的值。

如果我们不知道数组需要多大,或者需要动态改变其大小,则需要使用动态内存分配函数 malloc 函数来创建一个指向数组首地址的指针

c
int *array; 
array = (int *) malloc(5 * sizeof(int));

上述代码表示我们创建了一个指向整型元素的指针,并且使用 malloc 函数申请了一块大小为 5 个整型元素所占字节数之和的空间。

3 访问

要想访问数组元素,只需使用下标(从 0 开始)即可:

c
int a = array[0]; // 访问第 1 个元素
int b = array[2]; // 访问第 3 个元素

4 遍历

要遍历数组,可以使用循环结构(如 for 循环): 会输出数组中的所有元素。

c
for (int i=0; i < 5; i++) { 
    printf("%d\n", array[i]); 
}

5 特点

  • 数组中的所有元素具有相同的数据类型;
  • 数组在内存中是连续存储的,因此访问其元素速度较快;
  • 数组长度是固定不变的,如果需要动态改变大小,则需要重新创建一个新的数组。

6 多维数组

C 语言中的多维数组是指在定义时使用多个方括号 [] 来表示数组的维数。

例如,以下代码定义了一个二维数组 arr,包含 3 行 4 列的元素:

c
int arr[3][4];

int arr[2][2] = {{1,2},{3,4}};

这里的 arr 实际上是由 3 个一维数组组成的数组,在内存中排列方式为 3 行 4 列,故它可以看做有 3 个横向的一维数组,每个一维数组有 4 个竖向的元素。

多维数组的访问方式与一维数组类似,可以使用两个方括号来指定数组中的元素。例如要访问 arr 数组的第 2 行第 3 列元素,可以使用如下语句:

c
arr[1][2] = 10;

此时,数组 arr 中第 2 行第 3 列的元素值即被赋值为 10。

多维数组的定义和初始化有多种方式,可以在定义时直接赋初值,也可以在之后使用循环对其进行赋值。

使用多维数组,需要注意以下几点:

  • 多维数组的定义方式:在定义多维数组时,需要使用多个方括号 [] 来表示数组的维数。
  • 多维数组的内存布局:多维数组采用按行优先的方式进行排列,在内存中的组织方式是:将第 1 行的元素依次存储在一起,紧接着是第 2 行的元素,以此类推。
  • 多维数组的初始化:多维数组在定义时也可以直接赋初值,其中大括号内部的数据按行填充到数组中。如果未对数组进行初始化,则数组中的元素值将是不确定的随机值。

Released under the MIT License.