有人可以使用reinterpret_cast解释这行c ++代码吗?

Chr*_*rth 3 c++ pointers reinterpret-cast

考虑(1):

 uint8_t *pUART = reinterpret_cast<uint8_t*>(0x0800);
Run Code Online (Sandbox Code Playgroud)

我知道(1)只需将pUART指针更改为0x0800,但我很困惑这种方法是如何工作的.

如果是(2)那将是有意义的:

 uint8_t* pUART = reinterpret_cast<uint8_t*>(0x0800);
Run Code Online (Sandbox Code Playgroud)

我感到困惑,因为(1)与(3)相同:

 uint8_t x = reinterpret_cast<uint8_t*>(0x0800);
Run Code Online (Sandbox Code Playgroud)

但编译器不接受这个.有人可以为我清除这个吗?为什么(1)工作但不工作(3).

小智 10

C++是一种标记化语言.这意味着空格并不重要,除非需要分隔令牌.

uint8_t *pUART并且uint8_t* pUART意思完全相同.他们是三个令牌,即uint8_t,*pUART.

  • 我有点惊讶这个问题还没有触发风格战.当然`uint8_t*pUART`是应该如何**写的:P (4认同)
  • ......你甚至可以写'uint8_t*PUART`(注意*两个*空格). (2认同)
  • ......如果你讨厌可读性,甚至没有空格,`uint8_t*PUART`. (2认同)