Может кто-нибудь объяснить эту строку кода C ++, используя reinterpret_cast? - PullRequest
0 голосов
/ 26 апреля 2018

Рассмотрим (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).

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Строка (3) не работает, так как вы пытаетесь присвоить uint8_t* тип указателя просто uint8_t. Правильный вариант - ваша строка (1).

Однако, если вы используете <cstdint>, вы также можете использовать тип uintptr_t, который является указателем типа unsigned int.

0 голосов
/ 26 апреля 2018

C ++ - токенизированный язык. Это означает, что пробел не имеет значения, кроме случаев, когда это необходимо для разделения токенов.

uint8_t *pUART и uint8_t* pUART означают одно и то же. Это три токена, а именно uint8_t, * и pUART.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...