malloc前面的(双**)是什么意思?

时间:2011-12-27 02:22:50

标签: c++

例如在此代码中:

double **Data, *DataT;
Data = (double **)malloc(3*sizeof(double *)+3*12*sizeof(double));

我刚刚读到malloc从堆中分配内存。但我找不到那个(双**)在malloc面前的含义。 在此之后还有一行代码,我已经看到了这一点。

for (i = 0, DataT = (double *)(Data+3); i < 3; i++, DataT += 12)

这里有一个(double *)在Data + 3前面

你能告诉我这是做什么的吗? 谢谢

8 个答案:

答案 0 :(得分:5)

malloc()会返回void *类型,而您的指针类型为double *double **。 malloc之前的运算符 - 看起来像(类型) - 是类型转换运算符,需要将malloc的返回值转换为您正在使用的指针类型。

答案 1 :(得分:4)

(double**)是演员。它说malloc的结果改为double **。

malloc根据标准返回void*

所以它被double**转换为与data相同的性质:double **。

但是在C中,没有必要使用cat,因为void *是隐式输入的。所以你可以直接写:

Data = malloc(3*sizeof(double *)+3*12*sizeof(double));

因为你的问题是C ++,它与C malloc兼容,你必须把演员:(double**)

因此,如果您要在C和C ++程序中使用代码,则可以使用malloc和强制转换。否则,请使用newdelete ...

答案 2 :(得分:2)

这是类型广告。其语法和用法的规则应该是任何C引物的一部分。关于此类事情的最终着作是the one by Kernighan and Ritchie

答案 3 :(得分:2)

它表示“指向指针的指针”。

答案 4 :(得分:2)

(double **)是一个投射算子。它将malloc返回的void指针强制转换为指向double的指针。

答案 5 :(得分:2)

它是指向指针的指针。例如双重解除引用。

c -> some memory address
*c -> whatever is at the memory address stored in c
**c -> whatever is at the memory address stored in *c

答案 6 :(得分:2)

(double**)(double*)是所谓的 C样式演员。这些使得它们之后的任何类型成为括号内的类型。

第一个C样式转换是将malloc的返回类型转换为double**,因此它可以存储在double**变量中。 第二个演员将其变为double*,因此可以正确解除引用。

答案 7 :(得分:1)

double**表示您正在为指向双重

的指针分配指针