C++ 多维数组
严格来说C++没有多维数组,通常说的多维数组其实就是数组的数组,这一点需要谨记。
当一个数组的元素仍然是数组时,通常使用两个维度来定义他,一个维度表示数组本身的大小,另一个维度表示其元素(也是数组)大小。

多维数组的初始化,我们通常将二维数组第一维称为行。



多维数组的下标引用
如果表达式含有的下标数量和数组的维度一样多,表达式的结果就和数组的类型一致。如果表达式所含的下标比数组小,表达式的结果就是给定索引处的一个内层数组。

范围for遍历

这就是通过范围for语句把管理数组索引的任务交给了系统,因为要改变元素的值,所以row和col都是引用类型,第一个for循环遍历ia的所有元素,ia的元素是大小为4的数组,因此row的类型是含有四个整数数组的引用。第二个for循环依次遍历那些4元素数组,因此col类型是整数的引用。
因为我们要改变数组的值,所以我们使用的都是引用,但是还有一个深层次的原因促使我们这么做。

这个循环中没有任何写的操作,可是我们还是将外层循环的控制变量声明成了引用类型,这是为了避免数组被自动转化为指针。
如果我们不使用引用

我们将无法通过编译,因为之前第一循环遍历ia的所有元素,这些元素实际上是大小为4的数组,因为row不是引用类型,所以编译器初始化row时会自动将这些数组形式的元素转化成指向该数组内首元素的指针。这样得到的row的类型是int*,显然内层循环就不合法了。编译器试图遍历在一个int*内遍历,这显然不是程序的目的。

注意:使用范围for循环处理多维数组,除了最内层循环,其他所有循环的变量都应该是引用类型。
指针和多维数组

上述声明中括号必不可少!

可以通过auto来避免使用指针符号

也可以用begin和end函数
