Betrachten der Größe int
4 Bytes ist. Immer &i
gibt Ihnen die erste Adresse dieser 4 Bytes.
Wenn die Architektur Little Endian ist, dann hat die untere Adresse das LSB wie unten.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 5 | 0 | 0 | 0 |
+------+------+------+------+
Wenn die Architektur Big Endian ist, dann wird die untere Adresse das MSB wie unten haben.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 0 | 0 | 0 | 5 |
+------+------+------+------+
So wird &i
geben LSB-Adresse des i
wenn Little-Endian oder es gibt MSB-Adresse des i
wenn Big-Endian-
In gemischten Endian-Modus auch, entweder wenig oder Big-Endian wird für jede Aufgabe ausgewählt werden dynamisch.
Below Logik sagt Ihnen die Endianess
int i = 5;
void * ptr = &i;
char * ch = (char *) ptr;
printf("%p", ptr);
if (5 == (*ch))
printf("\nlittle endian\n");
else
printf("\nbig endian\n");
Dieses Verhalten wird sowohl gleich sein für c
und c++
Es ist ** nicht definiertes Verhalten **. Die einzige Möglichkeit, 'ptr' zu drucken, ist mit'% p' oder durch Umwandlung in 'intptr_t' und Verwendung des entsprechenden Druckformatierungsmakros. –
Geht es nicht um Endianness? –