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

C语言二维数组的定义和初始化(附带示例)

在C语言中,二维数组是一种常用的数据结构,它可以用来表示表格、矩阵等多维数据。二维数组本质上是一个数组的数组,即一个一维数组中的每个元素又是一个一维数组。

二维数组的定义

定义二维数组的一般语法如下:

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

例如,要定义一个 3 行 4 列的整型二维数组,我们可以这样写:

int matrix[3][4];

这里,我们定义了一个名为 matrix 的二维数组,它有 3 行 4 列,共 12 个整型元素。可以将其想象成一个 3x4 的表格。

二维数组的初始化

初始化二维数组有多种方法,我们来逐一探讨。

1. 完全初始化

我们可以在定义时就为所有元素赋值:

int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

这种方法直观地展示了数组的结构,每个大括号内的数据对应一行。

2. 部分初始化

如果我们只初始化部分元素,未初始化的元素会被自动设置为 0:

int matrix[3][4] = {
    {1, 2},
    {5},
    {9, 10, 11}
};

在这个例子中,未指定的元素将被初始化为 0。

3. 一维数组形式初始化

我们也可以将二维数组当作一个长的一维数组来初始化:

int matrix[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

C 编译器会自动将这些元素按行主序填充到二维数组中。

4. 省略行数

在初始化时,我们可以省略第一维的大小,编译器会根据初始化列表自动计算:

int matrix[][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

这里编译器会自动推断出数组有 3 行。

访问二维数组元素

要访问二维数组的元素,我们使用两个索引,第一个表示行,第二个表示列:

#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    
    printf("第 2 行第 3 列的元素是:%d\n", matrix[1][2]);
    
    return 0;
}

运行这段代码,输出结果为:

第 2 行第 3 列的元素是:7

注意,C语言的数组索引是从 0 开始的,所以 matrix[1][2] 实际上指的是第 2 行第 3 列的元素。

二维数组的内存布局

虽然我们将二维数组想象为一个矩形表格,但在内存中,它实际上是以一维方式存储的。C语言采用行主序(row-major order)存储二维数组,这意味着同一行的元素在内存中是连续存储的。


例如,对于上面的 3x4 数组,其在内存中的布局如下:

[1][2][3][4][5][6][7][8][9][10][11][12]

理解这一点对于高效地操作大型二维数组非常重要,特别是在需要优化性能的场景中。

使用循环遍历二维数组

通常,我们使用嵌套循环来遍历二维数组的所有元素:

#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

这段代码会输出整个二维数组的内容:

1 2 3 4 
5 6 7 8 
9 10 11 12 

通过这种方式,我们可以方便地对二维数组进行各种操作,如求和、查找特定元素等。


声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。