foo[0]
имеет тип int8_t
, поэтому он достаточно велик только для 1 байта.
Хотя доступны смежные байты (foo[1], foo[2], foo[3]
), компилятор не знает, что вы собираетесь копировать все4 байта при работе только с foo[0]
.
Вместо:
*((int32_t*)foo) = 300;
Что говорит: "Представьте, что foo является началом 4-байтового целого числа, затем назначьте егозначение 300 ".