Wei*_*Shi 4 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;
Run Code Online (Sandbox Code Playgroud)
这是因为int是32位,但void *在x64机器上是64位.摆脱这个错误的最佳做法是什么?
Bla*_*iev 14
使用intptr_t或uintptr_t.它们是与指针大小相同的整数:
#include <stdint.h>
...
intptr_t num = 1;
insertNode(list, (void *) num);
intptr_t getback = (intptr_t) node->data;
Run Code Online (Sandbox Code Playgroud)
当然,您可以存储的最大值取决于系统,但您可以在编译时通过INTPTR_MIN和检查它INTPTR_MAX.