value
- указатель на uint32_t
. Приведение преобразует его в указатель на другой тип; (uint8_t *)value
преобразует его в указатель на uint8_t
. Затем разыменование, которое используется для присвоения 8-байтовому полю по этому адресу.
(uint8_t)value
преобразует указатель в 8-битное целое число. Затем, помещая *
перед этим, вы попытаетесь использовать это целое число в качестве адреса для назначения, что недопустимо; Вы не можете разыменовать целое число. Кроме того, указатели имеют размер больше 8 бит (они 32 или 64 бита на большинстве современных процессоров), поэтому преобразование указателя в uint8_t
приведет к потере большей части значения указателя.