[英]Matrix Class in C++: An Explanation
我目前正在浏览c ++代码的一些旧的大学片段。 那时,另一个类被指派使用双指针和2D数组进行矩阵类。 幸运的是(或事后不幸)我从来没有机会学到这样的东西。 当我们毕业以供将来审查时,我借用了他们的代码。 如果有人可以请向我解释这个片段到底发生了什么:
//This is a constructor of a 1x1 matrix
signal::signal(){
_nrows = 1;
_ncols = 1;
_coef = new double*[_nrows];
_coef[0] = new double[_ncols];
_coef[0][0] = 0.0;
}
只是一个旁注,_coef是双重类型的**。
根据我的理解,_nrows和_ncols的值为1(表示它们的大小)。 然后,代码动态地在堆中创建一个double * out,其元素等于_nrows; 问题是,我不知道接下来会发生什么。 为什么对应于_ncols的数组不是指针? 为什么分配_coef [0]?
在内存中,二维数组(n,m)或多或少看起来像这样
_coef -> | _coef[0] -> {1, 2, 3, ..., m}
| _coef[1] -> {1, 2, 3, ..., m}
| _coef[2] -> {1, 2, 3, ..., m}
| ...
| _coef[n] -> {1, 2, 3, ..., m}
_coef
指向n
指针的数组。 并且这些指针中的每一个都指向m
双精度数组。
所以,在你的情况下, _coef
指向一个1指针的数组,这个指针指向一个double的数组。
现在回答你的问题
_coef[0]
,因为它是二维数组的第一个也是唯一的一行。 正如你所说,前两行为每个_nrows
和_ncols
分配值1
。
以下行动态分配double*
(指向double
指针)数组。 分配的double*
对象的数量是_nrows
(在您的情况下为1
)。 可以认为该语法与定义普通自动数组类似, double* array[1]
,其中元素的数量为1
。 然后_coef
是指向第一个double
指针的指针。 我将以图解方式表示内存表示:
_nrows = 1
_ncols = 1
_coef ---> _coef[0] ---> Currently points nowhere in particular
所以,现在你有_nrows
量double*
一字排开在内存中。 _coef[0]
指的是那些double*
的第一个。 新的动态分配数组(此时为double
s)由size _ncols
创建。 指向第一个double
s的指针被分配给_coef[0]
。 也就是说,第一个动态分配的数组中的第一个double*
现在指向第二个动态分配的数组中的第一个double
。
_nrows = 1
_ncols = 1
_coef ---> _coef[0] ---> _coef[0][0]
然后_coef[0][0] = 0.0
将第二个动态分配的数组中的第一个double
设置为0
。 因为它是唯一的 double
,因为两个动态分配的数组的大小都是1
,所以你已经将所有double
s初始化为0。
_nrows = 1
_ncols = 1
_coef ---> _coef[0] ---> _coef[0][0] = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.