【问题标题】:Derefencing a cast取消引用演员表
【发布时间】:2013-10-24 02:22:18
【问题描述】:

*(uint16_t *)"200" 返回什么?据我了解,"200" 指的是指向字符数组的指针,因此该指针指的是'2' 字符,然后通过 ascii 字符将其转换为整数,但我不明白最后的 @ 987654324@ 字符可以。

【问题讨论】:

  • 强制转换将 char 数组指针视为指向整数的指针,最后的星号取消引用整数指针,留下它指向的值。

标签: c pointers


【解决方案1】:

把复杂的表达式分解成小块:

char const* a = "200";
uint16_t*   b = (uint16_t*)a;
uint16_t    c = *b;

a 是指向字符串字面量的初始字符 ('2') 的指针。

当我们通过转换获得b 时,我们说“假设指向的数据实际上是uint16_t(或其数组)。

当我们取消引用b 以获取c 时,我们会获得“地址buint16_t”。

因此,它将字符串文字 ("20") 的前两个字符(两个字节,16 位)重新解释为 uint16_t

【讨论】:

  • 所以 b 将 20(二进制为 00110010'00110000)转换为 16 位十进制数,即 12748?
  • @JacobDenson 实际上它的 12338,假设你的计算机有大端。(很可能)然后字节的解释顺序是相反的。
  • 需要指出的是,如果地址没有与uint16_t 适当对齐,则该行为不是由C 标准定义的。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 2018-09-29
  • 2016-09-04
  • 2014-12-02
相关资源
最近更新 更多