我目前正在阅读一些C ++源代码,我偶然发现了这个:
double **out;
// ... lots of code here
// allocate memory for out
out = new double*[num];
不完全确定它的作用或含义。它是指向另一个指针的指针吗?
还有以下内容:
double ***weight;
// allocate memory for weight
weight = new double**[numl];
我很困惑:P,任何帮助都表示赞赏。
答案 0 :(得分:8)
new double*[num]
是一个双指针数组,即数组的每个元素都是double*
。您可以使用out[i] = new double;
为每个元素分配内存。同样weight
是double**
的数组。您可以使用new double*[num]
为每个权重元素分配内存(如果它应该是double*
的数组)
答案 1 :(得分:2)
这是一个指向double的指针。或者指针数组加倍。或者,如果每个指针本身都分配数组,那么它可能是一个矩阵。
out = new double*[num]; // array of pointers
现在,如果out[0]
分配如此:
out[0] = new double; // one double
或者像这样:
out[0] = new double[num]; // now you've got a matrix
答案 2 :(得分:1)
实际上,写作
double*[] out;
在C / C ++中等于
double** out;
它表示要加倍的指针数组。或指向double的指针。因为数组只不过是一个指针。所以这本质上是一个二维数组。
你也可以写
double[][] out;
同样,添加另一个指针级别将为您的数组添加另一个维度。 所以
double ***weight;
实际上是指向三维数组的指针。
答案 3 :(得分:1)
基本上,两个代码片段都会分配指针数组。对于分配,它与什么无关。只有类型检查才需要正确的声明。 Square bracjets应该单独阅读,只表示它是数组。
请将以下代码视为快速示例:
#include <stdio.h>
int main()
{
unsigned num = 10;
double **p1, ***p2;
p1 = new double*[num];
p2 = new double**[num];
printf("%d\n", sizeof(p1));
printf("%d\n", sizeof(p2));
delete [] p1;
delete [] p2;
return 0;
}
是的,两者都只是指针。分配的内存是sizeof(double *)* num。