很绕的数组下标
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];
不过,这样会浪费一定空间。
综上所述,定义个访问函数,避免很绕的数组下标和实际需求的转换。