Supposé un little endian architecture où l'int de 32 bits (4 octets), les octets d' int arr[]
ressembler à ceci (l'octet le moins important au plus faible de l'adresse. Toutes les valeurs en hexadécimal):
|01 00 00 00|02 00 00 00|03 00 00 00|04 00 00 00|05 00 00 00
char *ptr = (char *) arr;
Maintenant, ptr
points pour le premier octet - puisque vous avez joué à l' char*
, il est traité comme un tableau de char en avant:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- ptr
Ensuite, *(ptr+4)
accède à la cinquième élément de la char tableau et renvoie la correspondante char
valeur:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- *(ptr + 4) = 2
Par conséquent, printf()
tirages 2
.
Sur un Big Endian système, l'ordre des octets dans chaque int
est inversé, ce qui
|0|0|0|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5
^
+-- *(ptr + 4) = 0