Cela dépend de la façon dont vous allez lire element arr[4]
et sur la façon dont arr
a été attribué.
Si vous le lisez comme
uint32_t value = *(uint32_t*)arr;
y arr
a été alloué dynamiquement (en utilisant malloc
), ou alloué comme un int32_t
objet avec une durée de stockage automatique ("on the stack"), c'est OK.
Si c'est le cas, votre écriture change le type effectif en int32_t
.
Mais si vous voulez lire en utilisant un type non lié à uint32_t
et non un type de caractère, c'est un comportement non défini.
Aussi, arr
doit être correctement aligné pour int32_t
. (Si elle a été obtenue en utilisant malloc
il l'est automatiquement).
Après que la question ait été modifiée, il est devenu clair qu'il s'agit en effet d'un comportement non défini, car arr
est réparti comme suit :
struct element arr[4] __aligned(4);