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

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?

最佳答案

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


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

相当于

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


编辑:经过测试

关于c++ - 该代码如何正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22752677/

10-12 16:19