C 语言中的多维数组

C 语言中的多维数组与我们在数学中学习到的多维数组是一致的。如果你还不知道什么是多维数组也没有关系。多维数组可以看成是之前学习过的数组的扩展。它能让你完成一些仅仅依靠一维数组没有办法完成的事情。让很多事情完成的更为简单。

1. 多维数组的声明

多维数组可以看作是一维数组的扩展。所以,它的声明就是在之前学习的数组,也叫一维数组,之后继续添加大括号,如果添加一组大括号,那么称之为二维数组,以此类推,就构成了 N 维数组。

int intArray[A1][A2][A3][...][An]
int intArray[2][2];  // 二维数组
float floArtay[3][4][5]; // 三维数组

与一维数组中的声明类似,在多维数组中,第如果直接进行定义初始化,那么一个维数可以不指定,但是后面的维数是要明确指定的。

例如:

int intArray[][5][3]

2. 多维数组初始化

多维数组和一维数组一样,可以将全部的值一次完全赋给数组,也可以只初始化部分内容。你可以如同之前的一维数组一样,在大括号中以此写入初始化的数值。但是出于可读性的考虑,你最好按照数组的维数,用大括号对应。就如同下面的例子中一样。

short a[2][2] = { 1, 2, 3, 4};
short b[2][2] = { {1, 2}, {3, 4}};
short c[2][2] = { 3, 4};
short d[2][2] = { {}, {3, 4}};

上面这些变量初始化中,数组 a 的初始化方式和之前我们介绍过的一样。但是这样在多维数组中是我们不推荐的。因为在对应关系显示不明显。

数组 b 的初始化方式是我们推荐的,这种初始化看上去对应关系比较明了。当然缺点是我们要输入很多个括号。

数组 C 是进行了部分初始化,将 c[0][0] 和 c[0][1] 两个位置赋值为 3 和 4,其它位置会自动赋值为 0 。

多维数组与一维数组一样,一定要先初始化或者赋值后才能使用。否则也会产生未知的错误。

数组 d 展示了采用对应维数的大括号的便捷之处。我们这里只给 d[1][0] 和 d[1][1] 赋值,而没有给前面的两个位置赋值。

3. 多维数组的使用

多维数组的赋值与取值与之前的一维数组是一样的。通过索引位置直接获取相应的数值或者进行赋值操作。例如 a[2][3] = 12

由于有多维的存在。我们想要获取其中的每一个数值的时候,就要使用循环的嵌套。一般情况下,有几个维度,就要使用几重的嵌套。

4. 示例

#include <stdio.h>

int main()
{
    short a[2][2] = {{}, {3, 4}};
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
        }
    }

    int b[][2] = {{1, 2}, {3, 4}};
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            printf("b[%d][%d] = %d\n", i, j, b[i][j]);
        }
    }

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

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            for (int k = 0; k < 2; k++)
            {
                printf("c[%d][%d][%d] = %d\n", i, j, k, c[i][j][k]);
            }
        }
    }

    return 0;
}

运行结果:

a[0][0] = 0
a[0][1] = 0
a[1][0] = 3
a[1][1] = 4
b[0][0] = 1
b[0][1] = 2
b[1][0] = 3
b[1][1] = 4
c[0][0][0] = 1
c[0][0][1] = 2
c[0][1][0] = 3
c[0][1][1] = 4
c[1][0][0] = 5
c[1][0][1] = 6
c[1][1][0] = 7
c[1][1][1] = 8
c[2][0][0] = 9
c[2][0][1] = 10
c[2][1][0] = 11
c[2][1][1] = 12

示例程序里面通过 3 种不同的方式初始化了 a、b、c 三个多维数组,其中 a 与 b 数组是 2 维数数组,c 是 3 维数组。

这里在初始化数组的时候,我们采用通常建议的多层大括号的组织方式,这种方式虽然使用了更多的括号,但是可读性会更强,更有条理性。

在多维数组的使用中,会采用多层的嵌套循环来进行内部全部变量的赋值或者取值操作,如果只是想对于数组中的某一个位置上的数值进行修改,只要直接使用其索引位置就可以了,如 a[0][1] = 100 等。

5. 小结

多维数组可以被看做是之前介绍的一维数组的扩展。其基本的声明就是在一维数组的基础上,根据需要在后面添加成对的方括号即可。其初始化过程与一维数组类似,只不过为了增加代码的可读性,便于查错和维护的需要,建议在初始化过程中使用大括号来分组赋值。多维数组的使用也有一维数组无异。只不过需要用到多重嵌套的循环来进行遍历每一个数值。