Eine Frage zur Vereinigung in C - als ein Typ speichern und als ein anderer lesen - ist die Implementierung definiert?

Ich habe von K & R über Union in C gelesen. Soweit ich weiß, kann eine einzelne Variable in Union einen der verschiedenen Typen enthalten. Wenn etwas als ein Typ gespeichert und als ein anderer extrahiert wird, ist das Ergebnis rein implementierungsdefiniert.

Überprüfen Sie nun bitte diesen Codeausschnitt:

#include<stdio.h>

int main(void)
{
  union a
  {
     int i;
     char ch[2];
  };

  union a u;
  u.ch[0] = 3;
  u.ch[1] = 2;

  printf("%d %d %d\n", u.ch[0], u.ch[1], u.i);

  return 0;
}

Ausgabe:

3 2 515

Hier vergebe ich Werte in deru.ch aber von beiden abrufenu.ch undu.i. Ist die Implementierung definiert? Oder mache ich etwas wirklich Dummes?

Ich weiß, dass es den meisten anderen Leuten als Anfänger erscheint, aber ich bin nicht in der Lage, den Grund für diese Ausgabe herauszufinden.

Vielen Dank.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage