首页 > 编程笔记 > C语言笔记

C语言二维数组

C语言中的二维数组是一个常见的数据结构,它是由多个一维数组组合而成的,可以被用来表示一些需要按行列排列的数据集合,比如矩阵、地图等。本文将详细介绍C语言中二维数组的定义、初始化、访问、参数传递、内存分配等方面的内容,让初学者能够更好地掌握这一数据结构。

二维数组的定义

在C语言中,二维数组的定义格式为:

数据类型 数组名[行数][列数];

其中,数据类型指的是二维数组中每个元素的数据类型,可以是整型、浮点型、字符型等等;数组名指的是二维数组的名称,可以自行定义;行数和列数指的是二维数组中的行数和列数,也可以根据实际需要进行自定义。

例如,下面的代码定义了一个由3行4列组成的二维整型数组:
int arr[3][4];

二维数组的初始化

在定义二维数组时,我们也可以对其进行初始化。有两种方式可以初始化二维数组,分别是静态初始化和动态初始化。

1) 静态初始化

静态初始化是在定义二维数组的同时对其进行初始化,可以通过以下两种方式实现。

在定义时直接赋值

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
这样就定义了一个由 2 行 3 列组成的二维整型数组,并将其初始化为{{1, 2, 3}, {4, 5, 6}}。注意,当对二维数组进行初始化时,需要按照从左到右、从上到下的顺序进行赋值。

省略列数

在定义二维数组时,可以省略列数,由系统根据初始化列表的元素个数自动推算列数。例如:
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
这样就定义了一个由 3 行 3 列组成的二维整型数组,并将其初始化为{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

2) 动态初始化

动态初始化是在定义二维数组后,通过循环结构逐个为其元素赋值的方式实现。例如:
int arr[2][3];
int i, j;
for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
        arr[i][j] = i * j;
    }
}
这样就定义了一个由 2 行 3 列组成的二维整型数组,并将其初始化为{{0, 0, 0}

二维数组的访问

在 C语言中,可以使用下标访问二维数组中的元素。二维数组的下标由两个部分组成,分别是行下标和列下标,用中括号括起来,中间用逗号隔开。例如,访问 arr 数组中第 2 行第 3 列的元素,可以使用以下语句:
int x = arr[1][2];
这样就可以将 arr 数组中第 2 行第 3 列的元素赋值给变量 x。

二维数组作为函数参数

二维数组可以作为函数参数传递,通过这种方式可以在函数中对数组进行操作。在传递二维数组时,需要在函数定义和函数调用时都指定数组的列数。例如,下面的代码定义了一个函数 print_array,用于输出一个由 n 行 m 列的二维数组:
void print_array(int arr[][m], int n, int m) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}
在调用函数时,需要传递数组、行数和列数三个参数:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
print_array(arr, 2, 3);
这样就可以输出数组 arr 的所有元素。

二维数组的内存分配

在 C语言中,二维数组是按行优先存储的,即二维数组的每一行在内存中是连续存放的,而不同行之间的元素并不一定连续。例如,对于一个由 3 行 4 列组成的二维整型数组,内存中的存储结构如下所示:

arr[0][0] arr[0][1] arr[0][2] arr[0][3] arr[1][0] arr[1][1] arr[1][2] arr[1][3] arr[2][0] arr[2][1] arr[2][2] arr[2][3]

在使用二维数组时,需要注意内存的分配问题。当数组的规模比较大时,可以使用动态内存分配函数 malloc() 来动态分配内存。例如,下面的代码动态分配了一个由3行4列组成的二维整型数组:
int **arr;
int i;
arr = (int **)malloc(3 * sizeof(int *));
for (i = 0; i < 3; i++) {
    arr[i] = (int *)malloc(4 * sizeof(int));
}
这样就可以动态分配一个由 3 行 4 列组成的二维整型数组,并在使用完后使用 free() 函数释放内存。

总结

本文介绍了 C语言中二维数组的定义、初始化、访问、参数传递、内存分配等方面的知识。总的来说,二维数组是一种非常常用的数据结构,在 C语言中有着广泛的应用。掌握二维数组的相关知识,有助于提高编程效率,同时也有助于加深对 C语言的理解。

总结一下本文的主要内容:

希望通过本文的介绍,读者能够对 C语言中二维数组的相关知识有一个更加深入的了解。同时也希望读者能够继续深入学习 C语言,提高自己的编程能力。

相关文章