以下内容仅代表我个人的理解,不当之处请各位多多指教。

多维数组一般被抽象理解为矩阵,数组的本意是定义一系列相同的元素,按照这个理解那么就可以有如下用法:

假如我要写一个反汇编器,用 a 来表示一个寄存器,那么就可以表示为:

代码:
int a;
假如有 32 个这样的寄存器,就需要用数组:
代码:
int a[32];
假如 32 个寄存器作为一组,有两组这样的寄存器,怎么表示?定义 a[32], b[32] ?不需要这样,还是用数组:
代码:
int a[2][32]; // 表示有两组这样的寄存器
假如一个核心有两组这样的寄存器,一个 CPU 中有四个这样的核心,可以这样表示 CPU 中的所有寄存器:
代码:
int a[4][2][32]; // 表示一块 CPU 中的所有寄存器
现在看明白我所要表达的意思了吧?就是相当于数学里的代数。
a[4][2][32]; // 把后面的 [2][32] 看为一个元素,前面的[4]表示有4个这样的元素。

用多维数组一下子是反应不过来的。可以用 typedef 辅助,上面的过程可以转变为:
代码:
typedef int Register; // 定义一个寄存器
Register a[32]; // 32 个寄存器
typedef int RegisterGroup[32]; // 定义一个寄存器组
RegisterGroup a[2]; // 有两组这样的寄存器
typedef int Core[2][32]; // 定义一个核心
Core a[4]; // 有四个核心
只是表示方式不同,实际上和前面的三维数组表示的意思是一样的。使用的时候:
b = a[0][1][2]; // 表示把第一个核心的第二组寄存器中第三个寄存器的值赋给 b

以上是我对多维数组的一种理解。不当之处请大家多多指教。
在不同的语义下多维数组有不同的含义,切勿生搬硬套。
很多教材里对于数组的解释只说到了二维数组,多维数组就只是含糊其词略过了。

  • 标 题:答复
  • 作 者:XPoy
  • 时 间:2011-02-24 22:16:14

好玩,从来没用过多维数组。
我也说说自己对多维数组的理解,那个矩阵的说法一直都很不敢赞同啊,三层的怎么算,四层的又怎么算,和2D、3D、4D的样子完全不一样。
多维数组就应该简单的理解成这样
二维的
111
222 
333 
444

三维的
111222333444
111222333444
111222333444
111222333444

四维的
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444

每层都只是它底下一层单位的数组,是一层层的数组,和什么三维、平面一点关系也没。

而且LZ给每一层数组都做typedef的说法太妙了。:P