使用2D数组时,循环遍历列与循环遍历行

时间:2017-11-16 23:44:18

标签: c++ arrays pointers

我正在尝试理解这段代码。让我感到困惑的第一件事是,在第二行代码中,我相信他们正在创建一个指针数组,并且计划是这些指针指向数组。

我知道计算机并不关心,但对我来说,指针数组是水平的,然后每个数组都可以从该水平线上的点下拉,这是最合乎逻辑的。

那么," 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];
我理解这是一个指针数组,每个指针指向一列。每列中的元素数等于行数(列在2D数组中每行有一个垂直元素)。 我理解这个吗?
当我需要使用嵌套for循环来初始化2D数组时,我也会被绊倒。

1 个答案:

答案 0 :(得分:1)

行/列是对称/可互换的,正如您所说,&#34;计算机并不关心&#34;。话虽如此,为什么你认为指针数组是水平的,然后每个数组都可以从水平线上的点下拉,这是最合乎逻辑的?#34;?

我会想到另一种方式。我会发现更容易&#34;可视化&#34;水平对象的行(毕竟,我们水平编写(比如一个字符数组),行/行从上到下(比如一个数组数组))。我认为代码比你的建议更自然(对我而言)。

关键是,我们都有不同的想法,并且在一天结束时,ROWS / COLUMNS只是变量,可以很容易地写成X / Y或V / H或W / H或其他任何东西。