跳至正文
View Categories

1 min read

主要内容 #

什么是二维数组 #

先来回顾一下之前学习的数组:

其实所谓的二维数组,就是“数组”的数组。
如下图,二维数组中的内一个元素,都是一个数组。

需要注意的是,在C++中,二维数组中,作为元素的每个数组的长度,是一样的。

其实呢,二维数组在生活当中,也是非常常见的。

定义二维数组 #

假设我们要定义一个这样的二维数组

1  2  3  4
11 12 13 14
21 22 23 24

请注意下图中的四种写法。

  • 二维数组的定义中,第二个括号的数字不可省略,表示“数组元素”的长度
  • 一般习惯上,我们将一行的值,作为二维数组的一个元素
  • 比如:如上所示,则我们将第一行的 1 2 3 4 作为我们二维数组的第一个元素;第二个元素为 11 12 13 14;以此类推。

  • 一般,我们建议,在定义时,要将所有的 [ ] 中的数字都填上。
  • 遍历二维数组 #

    请试一试,写程序遍历输出上述的二维数组。

    /*
    请编程完成后,查看示例程序。
    
    
    
    
    
    */

    示例程序:

    #include < iostream >
    using namespace std;
    
    // 方法三。请大师码老师,先讲解方法一,然后依次讲解。
    void dashima(int [][4]);           // 声明函数,注意,函数声明的时候,形参可以只保留类型,省略变量名
    //void dashima(int matrix [][4]);  // 注意,上一行等价于这一行
    
    int main()
    {
        int matrix[3][4] = {1,2,3,4,11,12,13,14,21,22,23,24};
        int* pData = matrix[0];
        
        // 方法一
        for(int j=0; j < 3; ++j)
        {
            for(int i=0; i < 4; ++i)
                cout << matrix[j][i] << ", ";
            cout << "\n";
        }
    
        // 方法二
        for(int j=0; j < 3; ++j)
        {
            for(int i=0; i < 4;)                // 请注意大师码这里的写法
                cout << matrix[j][i++] << ", "; // 请思考,可以写作 matrix[j][++i] 吗?
            cout << "\n";
        }
    
        // 方法三
        dashima(matrix);
        return 0;
    }
    
    // 定义函数
    void dashima(int matrix[][4]) // 写成 int maxtrix[3][4] 也可以
    {
        for(int j=0; j< 3; ++j)
        {
            for(int i=0; i< 4;)
                cout << matrix[j][i++] << ", ";
            cout << "\n";
        }
        return; // 函数的返回类型为空,此行也可以省略。
    }

    内存中的排布 #

    请看上述程序的第四种写法。

    #include < iostream >
    using namespace std;
    
    int main()
    {
        int matrix[3][4] = {1,2,3,4,11,12,13,14,21,22,23,24};
        int* pData = matrix[0]; 
        // matrix 是二维数组;matrix[0] 二维数组的第0个元素,也是一个数组;
        // pData 既是 matrix[0] 的指针,也是 matrix 的指针。
    
        // 方法四
        for(int j=0; j < 3*4; ++j)
        {
            cout << pData[j] << ", ";  // 输出成一行。这也是真实的内存状态。
        }
        cout << "\n";
    
        return 0;
    }
  • pData 既是 matrix[0] 的指针,也是 matrix 的指针
  • 多维数组 #

    定义和读写

    int a[ ][7][8] = {…}; // 定义:第一维度,可以省略
    
    a[0][1][2];           // 读写:

    习题 #

    课后练习