Assumiamo un'architettura little endian in cui un int è 32 bit (4 byte), i singoli byte di int arr[]
appaiono come questo (byte meno significativo nell'indirizzo inferiore).Tutti i valori in esadecimale):
|01 00 00 00|02 00 00 00|03 00 00 00|04 00 00 00|05 00 00 00
char *ptr = (char *) arr;
Ora, ptr
punta al primo byte - da quando si è fusa per char*
, viene trattato come array di caratteri in poi:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- ptr
Quindi, *(ptr+4)
accede al quinto elemento dell'array char e restituisce il valore char
corrispondente:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- *(ptr + 4) = 2
Quindi, printf()
stampe 2
.
In un sistema Big Endian, l'ordine dei byte all'interno di ogni int
è invertita, con conseguente
|0|0|0|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5
^
+-- *(ptr + 4) = 0
fonte
2013-07-02 11:15:21
Se qualcuno vota questa domanda, per favore menziona il tuo commento, è molto difficile per me, speriamo non per gli altri .... :) –
Hai un " int "array, ma un puntatore" char ". – Lucas
+1 sul tuo annuncio :) –