将int转换为void*

kae*_*atl 1 c gcc pointers

我正在尝试从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*的正确方法是什么?

P.P*_*.P. 5

这个

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的括号放在括号中以避免这种惊喜总是一个好习惯.

除非您在该值上有有效地址,否则在尝试使用该指针时将调用未定义的行为.所以一定要明白你在做什么!

  • 我想另一个重要的事实是,强制转换操作符具有更高的优先级 (2认同)