首先,这不是一个骗局:
问题的不同之处在于:我只使用void*来存储int,但我实际上从未将它用作void*.
所以这个问题真的归结为:
void*保证至少与int一样宽
我不能使用intptr_t,因为我使用的是c89/ANSI C.
编辑
在C99(gcc版本)的stdint.h中,我看到以下内容:
/* Types for `void *' pointers. */
#if __WORDSIZE == 64
# ifndef __intptr_t_defined
typedef long int intptr_t;
# define __intptr_t_defined
# endif
typedef unsigned long int uintptr_t;
#else
# ifndef __intptr_t_defined
typedef int intptr_t;
# define __intptr_t_defined
# endif
typedef unsigned int uintptr_t;
#endif
Run Code Online (Sandbox Code Playgroud)
我可能只是偷偷摸摸地装上类似的东西并期望它能起作用吗?似乎转换应该工作,因为所有intptr_t都是整数类型的typedef ...
在C和/或C++中:将int转换为void指针并再次返回int是否安全?
基于问题" C++:将指针转换为int并稍后再返回指针是否安全? ".