C+中的**是什么+; 我现在正在阅读一些C++源代码,我发现了: double **out; // ... lots of code here // allocate memory for out out = new double*[num];
不完全确定它是做什么的,或者它意味着什么。是指针吗。。。指向另一个指针 还有以下内容:C+中的**是什么+; 我现在正在阅读一些C++源代码,我发现了: double **out; // ... lots of code here // allocate memory for out out = new double*[num];,c++,c,pointers,memory,C++,C,Pointers,Memory,不完全确定它是做什么的,或者它意味着什么。是指针吗。。。指向另一个指针 还有以下内容: double ***weight; // allocate memory for weight weight = new double**[numl]; 我很困惑:p,非常感谢您的帮助。这是指向双精度指针的指针。或指向双精度的指针数组。或者,如果每个指针本身分配数组,则它可能是一个矩阵 out = new double*[num]; // array of pointers 现在它取决于out[0
double ***weight;
// allocate memory for weight
weight = new double**[numl];
我很困惑:p,非常感谢您的帮助。这是指向双精度指针的指针。或指向双精度的指针数组。或者,如果每个指针本身分配数组,则它可能是一个矩阵
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
或者像这样:
out[0] = new double; // one double
out[0] = new double[num]; // now you've got a matrix
new double*[num]
是一个双指针数组,即数组的每个元素都是一个double*
。您可以使用out[i]=newdouble为每个元素分配内存
类似地weight
是一个double**
数组。您可以使用new double*[num]
为每个权重元素分配内存(如果它应该是一个double*
数组)实际上,写入
double*[] out;
在C/C++中等于
double** out;
它意味着指向double的指针数组。或指向双精度指针的指针。因为数组只不过是一个指针。这实际上是一个二维数组
你也可以写信
double[][] out;
同样,添加另一个指针级别将为数组添加另一个维度。
所以
实际上是指向三维数组的指针。基本上,您的两个代码片段都分配指针数组。对于分配来说,什么并不重要。只有类型检查才需要正确的声明。方括号应单独读取,表示仅为数组 将以下代码作为快速示例:
#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;
}
#包括
int main()
{
无符号数=10;
双**p1、***p2;
p1=新的双精度*[num];
p2=新的双精度**[num];
printf(“%d\n”,sizeof(p1));
printf(“%d\n”,sizeof(p2));
删除[]p1;
删除[]p2;
返回0;
}
是的,两者都只是指针。分配的内存是sizeof(double*)*num.您应该使用post编辑器的代码格式化功能,使文章更具可读性+1,最佳答案。然而,单独分配每个
双可能不是一个好主意,尤其是对于科学应用。最好分配一个双精度的平面数组,并让所有指针指向该数组的元素。否<代码>双*[]输出代码>是一个语法错误<代码>双*出[]
将声明一个双精度*
数组,而不是指针。数组和指针是不同的类型;例如,您不能分配给数组,因此out=newdouble*[num]代码>将无效。