我正在尝试从 int 创建一个 void*。但是 gcc 总是给我一个警告,我不能将 int 转换为 void*。这是我的代码:
#define M_TABLE_SIZE 64*1024
static const void* M_OFFSET = M_TABLE_SIZE;
我已经尝试过 (void*)M_TABLE_SIZE
但后来我收到一个错误,提示我无法使用 *
运算符。
将 int 转换为 void* 的正确方法是什么?
最佳答案
这个
static const void* M_OFFSET = (void*)M_TABLE_SIZE;
扩展为
static const void* M_OFFSET = (void*)64*1024;
由于 gcc 编译您正在执行 void*
和 int (1024
) 之间的算术运算。将您的定义放在括号内:
#define M_TABLE_SIZE (64*1024)
现在,您可以:
static const void* M_OFFSET = (void*) M_TABLE_SIZE;
没有问题。将您的 #define
放在方括号中以避免此类意外始终是一个好习惯。
除非您在该值处有一个有效地址,否则您将在尝试使用该指针时调用未定义的行为。因此,请确保您了解自己在做什么!
关于将 int 转换为 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26368241/