将void*转换为double

Nic*_*ung 5 c pointers pthreads type-conversion

我试图使用该pthread库来计算n斐波纳契数,其中n可以从范围0-1000.当我试图将我的类型转换void*为a 时,我遇到了一个奇怪的错误double.

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

pthread_create(&tid, &attr, calc_fib, (void *)n);
Run Code Online (Sandbox Code Playgroud)

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

void *calc_fib( void *num)
{
    double n;
    n = (double)num;
    ...
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

难道我无法从类型转换void*doubleC或我做错了我?

Dru*_*erB 12

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

你可以投射void*double*:

double *p = (double *)num;
Run Code Online (Sandbox Code Playgroud)

然后你取消引用它:

double n = *p;
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

double n = *(double *)num;
Run Code Online (Sandbox Code Playgroud)