前言
在开始学习编程时,我们被告知二维数组的形状如下:
![](https://img-blog.csdnimg.cn/5141f45d7a794bf58149c1b3fa3d9aba.png#pic_center)
图一:二维数组示意图
首先,对于二维数组的形状只是逻辑上的,即只要这两维被想成是夹角为 90° 就行。而大家一般从小到大更熟悉的肯定是坐标轴,那么为什么约定俗成了这样呢?
我认为的一个原因是因为定义成这样更符合写代码的习惯,例如下面的代码:
int a[2][2] = {{1, 2},
{3, 4}}
因为写代码是从上往下,左往右写,所以新加入的元素是出现在下方、右方,所以习惯将二维数组想成图一的形状。
缺点
正如上面说过的,我们已经习惯了数学中坐标系的定义了,有时候我们在编程时需要用到二维的数学知识时就会觉得程序中二维数组元素不方便对应到数学公式中。
例如在经典的8皇后问题中我们需要通过二维数组两个维度的坐标来确定某个斜边时,我们有现成的公式,但是脑海中我们对二维数组的认识其实就是图一中显示的,这让我们不能立刻将公式转换成代码。
解决办法
其实前言中说过了, 二维数组的形状是只是逻辑的,其两个维度只要被想成是正交的即可。所以缺点中的情况,我们只需将图一中的形状逆时针旋转 90° 就变成了我们熟悉的坐标系表示,并且因为本质是一样的,所以不存在这种思维的转变会带来什么错误。
![](https://img-blog.csdnimg.cn/a2caa2f2ed034c6188ea93658199ceef.png#pic_center)
图二:转化