主要内容 #
什么是二维数组 #
先来回顾一下之前学习的数组:
其实所谓的二维数组,就是“数组”的数组。
如下图,二维数组中的内一个元素,都是一个数组。
需要注意的是,在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; }
多维数组 #
定义和读写
int a[ ][7][8] = {…}; // 定义:第一维度,可以省略 a[0][1][2]; // 读写:
习题 #