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

C语言二维数组怎么定义?

C语言中的二维数组是一种常用的语法,它用于存储和操作表格形式的数据。二维数组可以被视为一个由多个一维数组组成的数组,或者说是一个矩阵。

二维数组的定义语法

定义二维数组的基本语法如下:

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

这里,“数据类型”可以是任何有效的 C 语言数据类型,如 int、float、char 等,“数组名”是你为数组选择的标识符,“行数”和“列数”分别指定数组的行数和列数。


让我们看几个具体的例子:

int matrix[3][4];  // 定义一个 3 行 4 列的整数数组
float grades[5][2];  // 定义一个 5 行 2 列的浮点数数组
char board[8][8];  // 定义一个 8x8 的字符数组,可用于表示棋盘

二维数组的初始化

定义二维数组后,我们可以在定义的同时进行初始化。有几种方式可以实现这一点:

1. 完全初始化

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

2. 部分初始化

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

在这种情况下,未指定的元素会被自动初始化为 0。

3. 省略行数

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

这里,编译器会根据初始化列表自动计算行数。

访问二维数组元素

要访问二维数组中的特定元素,我们使用两个索引:一个表示行,一个表示列。和一维数组一样,二维数组的索引仍然从 0 开始。例如:

#include <stdio.h>

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

这段代码的输出结果是:

matrix[1][2] = 7

遍历二维数组

遍历二维数组通常使用嵌套循环,也即外层循环遍历行,内层循环遍历列。请看下面的代码:

#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语言采用行优先顺序,这意味着数组的行被连续存储。例如,对于一个 3x4 的数组,内存布局如下:

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

理解这一点对于高效操作大型二维数组和避免越界访问非常重要。

二维数组作为函数参数

当将二维数组作为函数参数传递时,我们需要指定列数,但可以省略行数:

void printMatrix(int matrix[][4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

在这个例子中,列数(4)必须指定,因为编译器需要知道如何计算元素的内存位置。行数可以作为单独的参数传递,以增加函数的灵活性。


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