Das folgende Programm testet Little / Big Endian auf Intel Prozessor. Eigentlich ist Little Endian korrekt ausgegeben. Zuerst werfe ich int
auf char*
und greife auf seinen Wert ohne Initialisierung auf int *
zu. Ich verstehe den zweiten Teil der Ausgabe nicht. Hier wird int
pointer auf char *
geworfen. Warum ändert int
Zeiger seine Ausrichtung nicht auf char *
?
Die erste Hälfte Ihres Programms mit diesem Vergleich:
%Vor%sieht gut aus.
Die zweite Hälfte Ihres Programms enthält diese Aufgabe:
%Vor%Welcher ist kein gültiger Code? Sie können keine Pointer-Typen ohne explizite Umwandlung konvertieren. In diesem Fall könnte Ihr Compiler Sie davonkommen lassen, aber streng genommen ist es falsch. Diese Zeile sollte lauten:
%Vor%oder einfach diese äquivalente Aussage:
%Vor% In diesem Beispiel können Sie sicher sehen, warum Ihr zweiter Test nicht so funktioniert, wie Sie es möchten - Sie arbeiten immer noch am gesamten int
, nicht an dem einzelnen Byte, das Sie waren Interesse an. Wenn Sie p
a char *
erstellt haben, würde es wie erwartet funktionieren:
Darf der Zeiger auf
char *
? umgewandelt werden?
Ja, es ist nur die Umkehrung, die undefiniertes Verhalten aufrufen würde, genauer gesagt, das Ergebnis einer Umwandlung von char *
nach int *
(da char
1 Byte entspricht), so dass jeder Datenzeigertyp sicher sein kann in char *
) umgewandelt werden.