例如在此代码中:
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前面
你能告诉我这是做什么的吗? 谢谢
答案 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
和强制转换。否则,请使用new
和delete
...
答案 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**
表示您正在为指向双重