将 int 转换为 void*

标签 c pointers gcc

我正在尝试从 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/

相关文章:

c - 重复使用客户端TCP套接字进行多个HTTP连接

c - 从文本文件读取会跳过第一行

c++ - 指向多维数组第 n 个元素的指针

android - 跨原生 GCC 4.8 构建 : libcpp Error: invalid conversion from long long to off_t (aka long int)

c - 要计数到 CHAR_BIT 的位数

c - 如何将现有字符串中包含的 (ASCII) 字母字符复制到新字符串中

c - C中指针内存的范围是多少

c++ - 为什么不总是使用 fpic(位置无关代码)?

c - 声明带有存储类说明符但没有类型说明符的变量是什么意思?

c - 普通 C 从数据文件中读取