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

C语言二维数组的用法(包括定义、赋值、初始化、访问等)

二维数组是C语言中一种重要的数据结构,它可以用来存储和处理表格形式的数据。二维数组实际上是一个“数组的数组”,即一个一维数组中的每个元素又是一个一维数组。这种结构使得我们可以用行和列的概念来组织和访问数据,非常适合处理矩阵、表格等二维数据。

二维数组的定义和初始化

在C语言中,定义二维数组的一般语法如下:

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

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

int matrix[3][4];

这里,我们定义了一个名为 matrix 的二维数组,它有 3 行 4 列,共 12 个整型元素。需要注意的是,C语言中数组的索引是从 0 开始的,所以这个数组的行索引范围是 0 到 2,列索引范围是 0 到 3。
 

二维数组可以在定义时进行初始化。有几种不同的初始化方式:

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[][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

在这个例子中,编译器会自动计算出数组有 3 行。但是,我们不能省略列数。

二维数组的访问和赋值

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

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

int element = matrix[1][2];  // 获取第 2 行第 3 列的元素(值为 7)
printf("%d\n", element);
运行结果:
7

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

我们可以通过索引直接为二维数组的元素赋值:

int matrix[3][4];

matrix[0][0] = 1;
matrix[1][2] = 7;
matrix[2][3] = 12;

我们也可以使用嵌套循环来为二维数组赋值:

int matrix[3][4];
int value = 1;

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        matrix[i][j] = value++;
    }
}

这段代码会将 1 到 12 的数字依次赋值给 matrix 数组的元素。

综合示例

二维数组在处理表格数据、矩阵运算等场景中非常有用。下面是一个简单的例子,展示如何使用二维数组来表示和操作一个 3x3 的矩阵:

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // 打印矩阵
    printf("Original matrix:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // 计算主对角线元素之和
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        sum += matrix[i][i];
    }
    printf("Sum of main diagonal elements: %d\n", sum);

    // 将矩阵中的所有元素乘以 2
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            matrix[i][j] *= 2;
        }
    }

    // 打印修改后的矩阵
    printf("Matrix after multiplication:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

这个程序展示了如何初始化一个 3x3 的矩阵,如何遍历矩阵并打印其内容,如何计算主对角线元素之和,以及如何修改矩阵中的所有元素。程序的输出结果如下:

Original matrix:
1 2 3 
4 5 6 
7 8 9 
Sum of main diagonal elements: 15
Matrix after multiplication:
2 4 6 
8 10 12 
14 16 18 

通过这个例子,我们可以看到二维数组在处理矩阵数据时的强大功能。我们可以轻松地访问和修改矩阵中的任意元素,进行各种矩阵运算,如求和、乘法、转置等。
 

总之,二维数组的使用让我们能够更直观、更高效地处理二维数据结构,无论是在图像处理、游戏开发、科学计算还是数据分析等领域,二维数组都是一个非常有用的工具。

推荐阅读