在没有警告的情况下将 32 位 int 转换为 64 void * 指针

标签 c 64-bit void-pointers

我在 C 中有一个“通用”链接,它采用 void * data 将数据存储在节点中。

insertNode(linkedList * list, void *data);

//Storing/retrieving a string works fine;
char *str="test"; 
insertNode(list, str);
char *getback=(char *)node->data;

//Storing/retrieving an Int results a cast warning
int num=1;
insertNode(list,(void *)num);
int getback=(int)node->data;

这是因为 int 是 32 位的,而 void * 在 x64 机器上是 64 位的。消除此错误的最佳做法是什么?

最佳答案

使用intptr_tuintptr_t。它们是与指针大小相同的整数:

#include <stdint.h>
...
intptr_t num = 1;
insertNode(list, (void *) num);
intptr_t getback = (intptr_t) node->data;

当然,您可以存储的最大值取决于系统,但您可以在编译时通过 INTPTR_MININTPTR_MAX 检查它。

关于在没有警告的情况下将 32 位 int 转换为 64 void * 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392441/

相关文章:

关于 gets() 和 scanf() 的 C 问题

c# - 如何启动 AnyCPU 编译的 COM 服务器

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

c++ - 访问对象void pointer c++的成员

c - 如何从现有字符串中存储整数

c++ - 使用 ~/的 Makefile 路径目录

c - 解释lz4双缓冲示例

windows - 如何使用来自 Windows 的 python 脚本在 cygwin 中运行程序?

德尔福XE2 : Debug a 64 bit dll through a 64 bit app

c++ - 是否将两个 void 指针与 C++ 中定义的不同对象进行比较?