无法理解动态阵列数组的一个实现

时间:2016-03-12 05:34:10

标签: c++ dynamic-arrays

我遇到了这段代码(source)

// memory allocation
float *temp = new float[(order-1)*(order-1)];
float **minor = new float*[order-1];
for(int i=0;i<order-1;i++)
    minor[i] = temp+(i*(order-1));

我真的不明白。试图完成此代码的作者是什么? (是的,我知道他正在尝试创建一个程序来查找矩阵的逆矩阵,但我不知道这段代码是如何工作的。)

我认为这是等价的:

float **minor;
minor = new float*[order-1];
for(int i=0;i<order-1;i++)
    minor[i] = new float[(order-1)*(order-1)];

因为+(i*(order-1))似乎只是向前推进了本质上是存储单元的宽度。不过,我确信这个假设不会更加错误。尽管我的理论错误,但我无法在任何地方找到解释,因此我将非常感谢您的深入解释。解释如何使用浮点向量向量实现这一点也可能有所帮助。

1 个答案:

答案 0 :(得分:1)

第一个代码是有效地分配(order-1)x(order-1)矩阵。它可以像次要[i] [j]一样解决。它也可以通过temp:temp [i *(order-1)+ j]线性处理。有时使用这两种方法来处理矩阵可能很方便。许多商业/开源矩阵库使用线性寻址矩阵。

另一种看待它的方法:temp被分配为一个大块,然后minor为每行(或列,根据你的观点)索引temp。

第二个代码不一样。它正在分配(order-1)x(order-1)x(order-1)元素。