请原谅我缺乏理解,我是C的初学者。所以,我有一个void *
缓冲区,我calloc
喜欢这样:
void * dataBuffer = calloc(samples, sizeof(double));
并希望稍后阅读:
double myDoubleDB = dataBuffer[sampleIndex];
但是我收到错误,因为它们属于不同的类型(void和double)。
我怎样才能做到这一点?我的拱门是ARM,我正在使用GCC编译
更新:dataBuffer
超出了我的范围(其他图书馆),它只是void *
答案 0 :(得分:4)
double *dataBuffer = calloc(samples, sizeof(double));
请注意,对于double
,2个字节可能不够。
另请注意,内存中的所有位0(由calloc
提供)不一定代表有效的double
值(在大多数平台上,它将参见IEEE754)。
如果您无法更改dataBuffer
的声明,您仍应更正calloc
,然后执行(按照其他人的建议):
double myDoubleDB = ((double*)dataBuffer)[sampleIndex];
答案 1 :(得分:3)
如果你可以在第一时间指向double
,那就更好了。
double * dataBuffer = calloc(samples, sizeof *dataBuffer);
double myDoubleDB = dataBuffer[sampleIndex];
否则,只有不安全使用强制转换将void*
显式转换为double*
:
void * dataBuffer = calloc(samples, sizeof (double));
double myDoubleDB = ((double*)dataBuffer)[sampleIndex];
答案 2 :(得分:1)
你需要一些演员:
double myDoubleDB = ((double*)dataBuffer)[sampleIndex];
注意:为简单起见,最好使用指向double
而不是void
的指针。
根据最新消息:
您可以使用指针来减少演员阵容:
double *doubleDataBuffer = (double*) dataBuffer;
double myDoubleDB = doubleDataBuffer[sampleIndex];