Das C-Rätsel zum Wochenende
bearbeitet von pl> Nur eines verstehe ich noch nicht:
>
> ~~~c
> // (1)
> uint32_t le = 1146244951;
> uint8_t *b = (uint8_t*)≤ // mit address operator
> printf("%c%c%c%c\n",b[0],b[1],b[2],b[3]); // WORD
> // (2)
> char *a = "WORD";
> uint32_t *w = (uint32_t*)a; // ohne address operator
> printf("%d \n", w[0]); // 1146244951
> ~~~
>
> Warum einmal mit und einmal ohne &Addressoperator?
Versuch einer Antwort: Im Fall (2) wird die Binary `a` direkt in den Hauptspeicher gelegt. Das `*` vor dem `w` dereferenziert und so kann die Binary `a` direkt als Wert an `*w` zugewiesen werden. Mit dem Cast zum 32-Bit-Integer versteht sich.
Im Fall (1) hingegen wird nicht die Binary in den Hauptspeicher geschrieben sondern den Little Endian als Integer. Somit brauchen wir für die Zuweisung an `b` die Adresse welche der Addressoperator liefert.
MfG