13

[原创]多维数组作用的一种理解 - 定义重复的元素

cntrump 2011-2-23 12:33 3479
以下内容仅代表我个人的理解,不当之处请各位多多指教。

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

假如我要写一个反汇编器,用 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

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

快讯:[看雪招聘]十八年来,看雪平台输出了大量安全人才,影响三代安全人才!

最新回复 (4)
messen 2011-2-23 12:42
2
呵呵 有点意思
sonicyouth 2011-2-23 15:19
3
哦 还有点印象  不错
XPoy 2011-2-24 22:16
4
好玩,从来没用过多维数组。
我也说说自己对多维数组的理解,那个矩阵的说法一直都很不敢赞同啊,三层的怎么算,四层的又怎么算,和2D、3D、4D的样子完全不一样。
多维数组就应该简单的理解成这样
二维的
111
222
333
444

三维的
111222333444
111222333444
111222333444
111222333444

四维的
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444
111222333444111222333444111222333444111222333444

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

而且LZ给每一层数组都做typedef的说法太妙了。:P
cntrump 2011-2-25 11:29
5
为啥一定要想象为 3d , 4d ?
任意维数组都都抽象为矩阵:
a[4][3][8]; // 表示有 4*3 个方格,每个格里有8个元素
a[7][10][8][5]; // 表示有 7*10 个方格,每个格里又有一个 8*5 的矩阵
返回