uint32_t u32 = 0;
uint16_t u16[2];
static_assert(sizeof(u32) == sizeof(u16), "");
memcpy(u16, &u32, sizeof(u32)); // defined?
// if defined, how to we access the data from here on?
Это определенное поведение? И если да, то какой тип указателя мы можем использовать для доступа к целевым данным после memcpy
?
Должны ли мы использовать uint16_t*
, потому что это подходит для объявленного типа u16
?
Или мы должны использовать uint32_t*
, потому что тип исходных данных (исходные данные, скопированные memcpy
) uint_32
?
(Лично интересует С++ 11/С++ 14. Но обсуждение родственных языков, таких как C, также было бы интересно.)
&
и еще одну опечатку) - person Aaron McDaid   schedule 20.09.2016X
, будет всегда обращаться к ней через указатель типаX
. Иmemcpy
в такую переменную всегда круто и не изменит тип, пока вы придерживаетесь простых типов, где вы можете рассуждать о битовых шаблонах (целые числа, указатели, ...) и не иметь проблем с ловушка представления или выравнивание. - person Aaron McDaid   schedule 20.09.2016