我正在尝试从int创建一个void*.但是gcc总是给我一个警告,我不能把int转换为void*.这是我的代码:
#define M_TABLE_SIZE 64*1024
static const void* M_OFFSET = M_TABLE_SIZE;
Run Code Online (Sandbox Code Playgroud)
我已经尝试(void*)M_TABLE_SIZE但是后来我得到一个错误,我不能使用*运算符.
将int转换为void*的正确方法是什么?
这个
static const void* M_OFFSET = (void*)M_TABLE_SIZE;
Run Code Online (Sandbox Code Playgroud)
扩展到
static const void* M_OFFSET = (void*)64*1024;
Run Code Online (Sandbox Code Playgroud)
因为gcc编译你正在执行void*int和(1024)之间的算术运算.将您的定义放在括号内:
#define M_TABLE_SIZE (64*1024)
Run Code Online (Sandbox Code Playgroud)
现在,您可以:
static const void* M_OFFSET = (void*) M_TABLE_SIZE;
Run Code Online (Sandbox Code Playgroud)
没问题.将你#define的括号放在括号中以避免这种惊喜总是一个好习惯.
除非您在该值上有有效地址,否则在尝试使用该指针时将调用未定义的行为.所以一定要明白你在做什么!