将 void* 转换为 double

标签 c pointers pthreads type-conversion

我正在尝试使用 pthread 库来计算 n 斐波那契数,其中 n 的范围可以是 0-1000。当我尝试将我的 void* 类型转换为 double 时,我遇到了一个奇怪的错误。

主要是调用我的计算斐波那契函数:

pthread_create(&tid, &attr, calc_fib, (void *)n);

在我的 calc_fib 函数中,我尝试使用以下方式进行类型转换:

void *calc_fib( void *num)
{
    double n;
    n = (double)num;
    ...

但是,当我尝试这样做时,出现以下错误:

In function ‘calc_fib’:
error: pointer value used where a floating point value was expected
In function ‘main’:
error: cannot convert to a pointer type

我不能在 C 中将 void* 类型转换为 double 还是我只是做错了?

最佳答案

void *num 是一个指针。 double n 是一个变量。

您可以将 void* 转换为 double*:

double *p = (double *)num;

然后你取消引用它:

double n = *p;

或者在一行中:

double n = *(double *)num;

关于将 void* 转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700384/

相关文章:

c - 这个程序为 p 和 c 都给出了输出 "abc",但是如何呢?

c - 当字符串达到一定长度时,无法释放结构体的字符指针元素

c - pthread_create 的第三个参数需要哪种类型

c - 我怎样才能按这个顺序执行3个线程呢?

c++ - nvidia 驱动程序使套接字在接受时失败

c - 在套接字编程中选择

c - 如何在 C 中逐字符/逐数字读取输入字符?

c - Fork() 和全局变量

c++ - BinaryNode *& 类型的非常量引用的初始化无效

c++ - 是否有任何非GPL开源C\C++ H264编码库?