有人可以使用 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 *pUART
和 uint8_t* pUART
意思完全一样。它们是三个标记,即uint8_t
、*
和pUART
。
第 (3) 行不起作用,因为您正试图将 uint8_t*
指针类型分配给 uint8_t
。正确的变体是您的行 (1).
但是,如果您要使用 <cstdint>
,您还可以使用 uintptr_t
类型,它是一个无符号整型指针。
考虑 (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 *pUART
和 uint8_t* pUART
意思完全一样。它们是三个标记,即uint8_t
、*
和pUART
。
第 (3) 行不起作用,因为您正试图将 uint8_t*
指针类型分配给 uint8_t
。正确的变体是您的行 (1).
但是,如果您要使用 <cstdint>
,您还可以使用 uintptr_t
类型,它是一个无符号整型指针。