如何将整数转换为结构是有效的

时间:2017-01-17 08:04:07

标签: c c11

我有一个代码,其中强制转换整数结构指针会在gcc(linux)上发出警告

typedef struct st {
    int a;
    char *b;
}st;
...
int handle;

int main() {
...
st *sptr = (st*)handle;
...
}

根据C11规范

  

整数可以转换为任何指针类型。除非事先指明,否则   结果是实现定义的,可能没有正确对齐,可能不指向   引用类型的实体,可能是陷阱表示。

我的问题是  我们可以将一个整数转换为结构指针,或者我们应该寻找其他方法并保持这个作为最后的手段吗?

1 个答案:

答案 0 :(得分:1)

有两件事需要考虑:

  • 可能无法表示结果。 int可能与给定平台的指针类型具有相同的表示形式。这就是为什么uintptr_t存在这种情况的原因。 uintptr_t handle;会使您的代码可移植。

  • 整数值必须是可以解释为给定系统的对齐地址的东西。