浅析数组(多维)储存的值

一个2维数组(bidimensional array)可以被想象成一个有同一数据类型的2维表格。


 

jimmy 显示了一个整型(int )的3x5二维数组,声明这一数组的的方式:

int jimmy [3][5];

而引用这一数组中第2列第4排元素的表达式为:jimmy[1][3]  (下标都从0开始)


 

多维数组(Multidimensional arrays)并不局限于2维。它可以有任意多维,虽然需要3维以上的情况并不多。但是考虑一下一个多维的数组所需要的内存空间,例如:

char century [100][365][24][60][60];

若一个世纪中的每一秒代表一个字符(char),那么就是多于30亿的字符!定义这样一个数组,需要消耗3000M(3 gigabytes of memory!)的内存。

多维数组是一个抽象的概念,因为我们把各个索引的乘积放入一个简单的数组中就可以获得同样的结果。例如:

int jimmy [3][5]; //效果与下面等价 
int jimmy [15]; //两者等效

唯一的区别是编译器帮我们记住每一个想象中的维度的深度。下面的例子中我们就可以看到,两段代码一个使用2维数组,另一个使用简单数组,都获得同样的结果,即都在内存中开辟了一块叫做jimmy的空间,这个空间有15个连续地址位置,程序结束后都在相同的位置上存储了相同的数值,如后面图中所示:

 

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];
int n,m;

int main ()
{
  for (n=0; n<HEIGHT; n++)
    for (m=0; m<WIDTH; m++)
    {
      jimmy[n][m]=(n+1)*(m+1);
    }
}
#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT * WIDTH];
int n,m;

int main ()
{
  for (n=0; n<HEIGHT; n++)
    for (m=0; m<WIDTH; m++)
    {
      jimmy[n*WIDTH+m]=(n+1)*(m+1);
    }
}

没有输出,但两者都向内存中的叫做jimmy的内存块存入如下数值:


 

 

这里用了宏定义常量(#define)简化未来可能出现的程序修改,例如,将数组的纵向由3扩大到4,只需要将代码行:

#define HEIGHT 3

修改为 :

#define HEIGHT 4

而不需要对程序的其他部分作任何修改。

 

 

posted on 2014-03-07 20:16  guozqzzu  阅读(534)  评论(0编辑  收藏  举报