【发布时间】:2013-10-24 02:22:18
【问题描述】:
*(uint16_t *)"200" 返回什么?据我了解,"200" 指的是指向字符数组的指针,因此该指针指的是'2' 字符,然后通过 ascii 字符将其转换为整数,但我不明白最后的 @ 987654324@ 字符可以。
【问题讨论】:
-
强制转换将 char 数组指针视为指向整数的指针,最后的星号取消引用整数指针,留下它指向的值。
*(uint16_t *)"200" 返回什么?据我了解,"200" 指的是指向字符数组的指针,因此该指针指的是'2' 字符,然后通过 ascii 字符将其转换为整数,但我不明白最后的 @ 987654324@ 字符可以。
【问题讨论】:
把复杂的表达式分解成小块:
char const* a = "200";
uint16_t* b = (uint16_t*)a;
uint16_t c = *b;
a 是指向字符串字面量的初始字符 ('2') 的指针。
当我们通过转换获得b 时,我们说“假设指向的数据实际上是uint16_t(或其数组)。
当我们取消引用b 以获取c 时,我们会获得“地址b 的uint16_t”。
因此,它将字符串文字 ("20") 的前两个字符(两个字节,16 位)重新解释为 uint16_t。
【讨论】:
uint16_t 适当对齐,则该行为不是由C 标准定义的。