Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的**是什么+; 我现在正在阅读一些C++源代码,我发现了: double **out; // ... lots of code here // allocate memory for out out = new double*[num];_C++_C_Pointers_Memory - Fatal编程技术网

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]将无效。