很绕的数组下标

 int array[3] = {1, 2, 3}; 

(如有纰缪,望各位指正。)

相信,大多数人都知道array[3]是越界的,array[0]开始

但是,一旦遇到动态分配一维数组表示二维数组时,就蛋疼了。

(今天的实验课,就被这东西搞得有点乱)

1 double * matrix = new double[3 * 4];

那么,如何表示第2行,第3列呢?

答案是:matrix[(2-1) * 4 + (3-1)];

 

当然,单独抽出来,还能接受。

不过,当你涉及矩阵相乘,转置等运算时,

就让人很乱。

 

个人觉得,有2种方式,可以避免这种坑.

1.  定义一个访问函数

double set(int row, int column)
{
    //这里可添加一些判断,如:地址是否为空,是否越界等

    return matrix[(row-1) * maxColumn + column-1];
}     

2.   多申请一些位置

1 double * matrix = new [(maxRow + 1) * (maxColumn + 1)];

  之后,直接用matrix[row * maxColumn + column];

  不过,这样会浪费一定空间。

 

综上所述,定义个访问函数,避免很绕的数组下标和实际需求的转换。

 

posted @ 2014-03-27 13:02  阿鲁巴  阅读(195)  评论(0编辑  收藏  举报