С точки зрения языка C, описание того, что вы делаете, это изменение представления переменной int
n
. В C все типы имеют «представление» в виде одного или нескольких байтов (unsigned char
), и доступ к базовому представлению разрешен путем приведения указателя к char *
или unsigned char *
- последний лучше по причинам, которые могли бы просто излишне усложняйте вещи, если я зайду в них здесь.
Как ответил schnaader, в порядке с прямым порядком байтов, дополняющем реализацию с 32-битным int
, представление 260:
0x04 0x01 0x00 0x00
и перезапись первого байта с 0
приводит к:
0x00 0x01 0x00 0x00
что представляет собой представление 256 для такой реализации.
C позволяет реализациям, которые имеют биты заполнения и представления прерываний (которые вызывают сигнал / отменяют вашу программу, если к ним обращаются), поэтому в общем случае перезаписать часть, но не всю int
, таким образом, небезопасно , Тем не менее, он работает на большинстве реальных машин, и если вместо этого вы используете тип uint32_t
, он будет гарантированно работать (хотя порядок битов все равно будет зависеть от реализации).