【问题标题】:Getting compile time error while typecasting void * pointer variable to unsigned int to uint32将 void * 指针变量类型转换为 unsigned int 到 uint32 时出现编译时错误
【发布时间】:2018-06-04 07:07:16
【问题描述】:

我正在尝试将void * 类型的值类型转换为uint32,但编译后出现错误:

错误:从指针转换为不同大小的整数

【问题讨论】:

  • 在 64 位系统上,sizeof(void*) 可能等同于 64 位;即大于uint32
  • 是的,但必须传递给一个接受 uint32 类型参数的函数
  • 如果你有两升的东西要放入一升的瓶子里,你将不得不重新考虑你的问题,或者扔掉一半。
  • @D.Prakash 如果演员成功,你会怎么做?该函数只会获得 一半 的值,因此无论如何它都无法重建指针。
  • @D.Prakash。不要使用uint64;这只是把罐子踢到了路上。请改用 uintptr_t 类型。

标签: c pointers casting


【解决方案1】:

C 标准是这样说的,C11 6.3.2.3/6:

任何指针类型都可以转换为整数类型。除先前规定外, 结果是实现定义的。如果结果不能用整数类型表示, 行为未定义。结果不必在任何整数的值范围内 输入。

这意味着由编译器指定在给定系统上会发生什么。显然,您的特定编译器无法表示结果,因此会引发诊断消息。

您应该改为转换为uintptr_t。该类型保证足够大以包含对象指针值。

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 2014-02-06
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2017-07-25
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多