主要内容 #
什么是二维数组 #
先来回顾一下之前学习的数组:

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

需要注意的是,在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]; // 读写:
习题 #