我正在尝试理解这段代码。让我感到困惑的第一件事是,在第二行代码中,我相信他们正在创建一个指针数组,并且计划是这些指针将指向数组。
我知道计算机不关心,但对我来说,最合乎逻辑的做法是让指针数组水平放置,然后每个数组都可以从该水平线上的点下降。
那么,“dynamicArray = new int *[COLUMNS];”是否合理?相反?
int **dynamicArray = 0;
//为行元素分配的内存。
dynamicArray = new int *[ROWS] ;
//为每一列的元素分配的内存。
for( int i = 0 ; i < ROWS ; i++ )
dynamicArray[i] = new int[COLUMNS];
//释放分配的内存
for( int i = 0 ; i < ROWS ; i++ )
delete [] dynamicArray[i] ;
delete [] dynamicArray ;
编辑:我更多地考虑了这一点,而我经常被绊倒的是我以错误的方式考虑行和列。
dynamicArray = new int *[ROWS];
我理解这是一个指针数组,每个指针都指向一列。每列中的元素数等于行数(在我们的二维数组中,列的每一行都有一个垂直元素)。
我的理解对吗?
当我需要使用嵌套 for 循环来初始化二维数组时,我也经常被绊倒。
最佳答案
行/列是对称的/可互换的,正如您所说,“计算机不关心”。话虽如此,您为什么认为“让指针数组水平放置然后每个数组都可以从该水平线上的点下降是最合乎逻辑的”?
我不这么认为。我会发现“可视化”水平对象的行要容易得多(毕竟,我们水平书写(例如,字符数组),并且行/行从上到下(例如,数组数组))。我认为该代码(对我而言)比您建议的更自然。
重点是,我们都有不同的想法,归根结底,ROWS/COLUMNS 只是变量,可以很容易地写成 X/Y 或 V/H 或 W/H 或其他任何形式。
关于c++ - 使用 2D 数组时循环遍历列与循环遍历行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47341032/