从不同大小的整数转换为指针(将 int 作为 const void * 参数传递)

标签 c 64-bit void-pointers

我必须在 Linux 上使用 gcc 维护一大块源代码,它具有以下函数原型(prototype):

int foo(const void*, ...)

我必须将一个整数传递给这个函数。我知道这是个坏主意,但在这个阶段,我不允许修改源代码。

即我必须调用 foo(n)(n 定义为 int n)

在 64 位机器上,我得到一个错误:

cast to pointer from integer of different size

据我了解,这是因为 32 位机器上整数的大小为四个字节,而指向 void 的指针的大小为八个字节。

我通过首先将大小为 4 字节的整数转换为大小为 8 字节的长整数来解决编译错误。所以我做了 foo((long)n)

我想知道这是处理这个问题的可接受方式还是有其他建议?

最佳答案

您可以使用 intptr_t,但它是可选的并且在 stdint.h 中可能不可用:

intptr_t n = 1;
foo((void*)n);

关于从不同大小的整数转换为指针(将 int 作为 const void * 参数传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358410/

相关文章:

c - 访问结构中指针(变量)结构的成员

平滑函数的c代码优化

c# - 在C#中调用c dll

bash - 64 位 Ubuntu 上的脚本问题

visual-studio-2008 - 安装程序仅在 x64 系统上安装到 root

c++ - 将指向 T 的指针存储在 void* 中,但 T 可以是常量或非常量 - 使用 void const* 还是仅使用 void*?

c - 这个空指针是怎么回事?

c - 像 qsort 这样的 C 函数如何处理不同的数据类型?

c - child 收到 sigstop 后 wait() 不返回

c++ - x64 架构与 x86 有何不同