Kann der int-Zeiger in char * umgewandelt werden?

8

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 * ?

%Vor%     
Goutham 26.01.2013, 19:53
quelle

2 Antworten

5
  1. Die erste Hälfte Ihres Programms mit diesem Vergleich:

    %Vor%

    sieht gut aus.

  2. 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:

    %Vor%
Carl Norum 26.01.2013, 19:57
quelle
1
  

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.

    
user529758 26.01.2013 19:55
quelle

Tags und Links