c++ - 这段代码如何正确?

标签 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 ?

最佳答案

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

[NJ] 没有声明它的长度,而是它的 type 声明的一部分。 oldMatrix 是一个指向长度为NJ 的数组的指针,它被设置为指向一个长度为NI 的动态数组。

相当于

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

编辑:测试

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

相关文章:

javascript - 检查JS中是否设置了数组项

arrays - FORTRAN 95,数组必须有恒定的形状错误

php - array_replace_recursive 不会用一些空数组替换数组

c++ - 为什么 const char[] 与 std::ranges::range 的匹配比显式的 const char* 自由重载更好,以及如何修复它?

c++ - 双重自递归变量可以保存JSON吗?

c++ - 在 OpenCV 中执行 Eigenfaces 算法时出错

python - 将 numpy 数组的负值变为正值

perl - 如何在 Perl 中访问二进制标量的第 n 个字节?

c++ - 无法抑制 valgrind 中的错误

c++ - 是否有一个易于使用、与平台无关的包可以用来在 C++ 下读写 gzip 流?