c语言 - 将 malloc 强制转换为基元类型



在C中如何允许这样做?

int p= (int) malloc (sizeof(int));

我只在 gcc 中编译时收到警告。

警告:从指针强制转换为不同大小的整数 [-Wpointer-to-int-cast]

空指针不能强制转换为基元类型,对吗?

*((int*)(x))//is allowed - assume x is of type void*

但是如何也允许直接强制转换为基元呢?

这不是禁止的,而是实现定义的行为。引用C11,章节§6.3.2.3

任何指针类型都可以转换为整数类型。除非前面指定, 结果是实现定义的。如果结果无法以整数类型表示, 行为未定义。结果不必在任何整数的值范围内 类型。

这就是编译器发出警告的原因。

也就是说,引用第 7.20.1.4 章,能够容纳对象指针的整数类型,我们有intptr_tuintptr_t

以下类型指定一个有符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为此类型,然后转换回指向 void 的指针, 结果将等于原始指针:

intptr_t

以下类型指定一个无符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为此类型,然后转换回指向 void 的指针, 结果将等于原始指针:

uintptr_t


话虽如此,为了完整起见,让我补充一点,为什么不将malloc()和家庭的回报值投C,有相当多的理由。

相关内容

  • 没有找到相关文章

最新更新