我在 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_t
或uintptr_t
。它们是与指针大小相同的整数:
#include <stdint.h>
...
intptr_t num = 1;
insertNode(list, (void *) num);
intptr_t getback = (intptr_t) node->data;
当然,您可以存储的最大值取决于系统,但您可以在编译时通过 INTPTR_MIN
和 INTPTR_MAX
检查它。
关于在没有警告的情况下将 32 位 int 转换为 64 void * 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392441/