pl: Das C-Rätsel zum Wochenende

Beitrag lesen

Nur eines verstehe ich noch nicht:

    // (1)
    uint32_t le = 1146244951;    // Integer
    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";            // Binary
    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