【问题标题】:Cycling through columns vs cycling through rows when working with 2D arrays使用 2D 数组时,在列中循环与在行中循环
【发布时间】:2018-04-30 15:54:31
【问题描述】:

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

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

那么,“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 循环来初始化二维数组时,我也经常被绊倒。

【问题讨论】:

    标签: c++ arrays pointers


    【解决方案1】:

    行/列是对称的/可互换的,正如您所说,“计算机不在乎”。话虽如此,您为什么认为“让指针数组保持水平然后每个数组都可以从该水平线上的点下拉是最合乎逻辑的”?

    我会想另一种方式。我会发现“可视化”水平对象行要容易得多(毕竟,我们水平编写(例如,字符数组),并且行/行从上到下(例如,数组数组))。我认为代码比您建议的更自然(对我而言)。

    关键是,我们都有不同的想法,归根结底,ROWS/COLUMNS 只是变量,可以很容易地写成 X/Y 或 V/H 或 W/H 等。

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 2023-03-19
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多