C++中的矩阵类:解释
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(表示它们的大小)。然后,代码在堆中动态创建一个双精度* 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
指向一个指针的数组,而这个指针指向一个双精度数组。
现在回答您的问题
- 它不是一个指针,因为在第二个维度中,你最终想要存储双精度,而不是指针。
- 它被分配给
_coef[0]
,因为它是二维数组的第一行,也是唯一一行。
正如您所说,前两行将值1
分配给_nrows
和_ncols
中的每一个。
以下行动态分配一个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,创建大小为_ncols
。指向其中第一个double
的指针分配给_coef[0]
。也就是说,第一个动态分配数组中的第一个double*
现在指向第二个动态分配数组中的第一个double
。
_nrows = 1
_ncols = 1
_coef ---> _coef[0] ---> _coef[0][0]
然后_coef[0][0] = 0.0
将第二个动态分配数组中的第一个double
设置为0
。因为它是唯一的double
,因为你的两个动态分配数组的大小都是1
的,所以你已经将所有double
初始化为0。
_nrows = 1
_ncols = 1
_coef ---> _coef[0] ---> _coef[0][0] = 0
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?