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

Can someone explain this line of c++ code using reinterpret_cast?

考虑 (1):

 uint8_t *pUART = reinterpret_cast<uint8_t*>(0x0800);

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

如果是 (2) 就有意义了:

 uint8_t* pUART = reinterpret_cast<uint8_t*>(0x0800);

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

 uint8_t x = reinterpret_cast<uint8_t*>(0x0800);

但是编译器不接受这个。有人可以帮我解决这个问题吗?为什么 (1) 有效但 (3) 无效。

C++ 是一种标记化语言。这意味着空格无关紧要,除非需要分隔标记。

uint8_t *pUARTuint8_t* pUART 意思完全一样。它们是三个标记,即uint8_t*pUART

第 (3) 行不起作用,因为您正试图将 uint8_t* 指针类型分配给 uint8_t。正确的变体是您的行 (1).

但是,如果您要使用 <cstdint>,您还可以使用 uintptr_t 类型,它是一个无符号整型指针。