c - 将 double as (void *) 传递给函数

标签 c pointers

我写了一个接收void *类型参数的函数和我可以传递char*int的计划,并在接收函数我读任何我期望的。

看起来像:

void __declspec(dllexport) void* func(void *);

接下来我尝试在这里传递一个double:

double d = 3.14;
(*funcPtr)( (void *)d ); 

但出现错误:

error: invalid cast from type 'double' to type 'void*'

然后我经历了method to pass double to void argument线程并尝试这种方式:

double d = 3.14;
double *p_d = (double *)d;
(*funcPtr)( (void *)p_d );

但还是一样的运气:

error: invalid cast from type 'double' to type 'double*'

我缺少什么以及如何解决我的问题?我认为一个解决方案是定义几个 typedef 函数指针。

最佳答案

double d = 3.14;
double *p_d = &d;

您不需要将类型转换为需要引用 的指针。 当您需要使用指针中的值时,您可以像这样取消引用它。

double new_d = *p_d;

并且在将 p_d 作为空指针接收的函数中,您必须在使用前将指针转换回双指针。

喜欢

void func(void *p_d)
{
    double new_d = *(double*)p_d;
    ...
}

关于c - 将 double as (void *) 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65205467/

相关文章:

c - C中指针数组的定义

c++ - 为什么打印单向链表时有一个虚拟节点?

Coldfire 强制使用 RAM 而不是寄存器

c - C中的重传服务器队列实现

mysql - 在多线程应用程序中使用 libmysqlclient

c - 为什么我不能在没有获取 int 地址的情况下将 int 存储到 char[]?

c - 将 void 指针作为函数参数传递并将其转换为 timeval 数组

c - 我需要将分散-聚集 DMA 链表放入不可缓存的内存中吗?

c - 多个值的 OpenMP argmin 缩减

c - 如何声明从结构到最终数组的指针