这段代码怎么样?

时间:2014-03-31 02:21:42

标签: c++ arrays

我已经下载了一个代码,它看起来是正确的(并运行):

int (*oldMatrix)[NJ] = new int[NI][NJ];
int (*newMatrix)[NJ] = new int[NI][NJ];

/*  initialize elements of old to 0 or 1 */
for (i=1; i<=NI; i++) {
    for (j=1; j<=NJ; j++) {
        x = rand()/((float)RAND_MAX + 1);
        if(x<0.5) {
            oldMatrix[i][j] = 0;
        } else {
            oldMatrix[i][j] = 1;
        }
    }
}

我不明白:为什么oldMatrix和newMatrix的尺寸为NI而不是NJ?

2 个答案:

答案 0 :(得分:2)

int (*oldMatrix)[NJ] = new int[NI][NJ];

[NJ]并未声明其长度,而是 type 声明的一部分。 oldMatrix是指向长度为NJ的数组的指针,该数组设置为指向长度为NI个数组的动态数组。

它相当于

typedef int row_type[NJ];
row_type *oldMatrix = new row_type[NI];

编辑:经过测试

答案 1 :(得分:1)

因为NI表示没有行,NJ表示没有列。

                  NJ
          a1 a2 a3 a4
 NI     b1 b2 b3 b4
          c1 c2 c4 c4
          d1 d2 d3 d4