Il existe un tableau arr
avec une mémoire allouée pour deux short
s (4 octets au total). Ensuite, je remplis ces deux éléments avec ffff
et eeee
en conséquence. Après que j'essaie d'itérer sur la même mémoire allouée comme elle a été allouée pour 4 char
s (aussi 4 octets au total, mais maintenant je suppose être capable de rechercher des éléments par 1 octet). Comme vous pouvez le voir à la sortie, il ne montre pas ce que je m'attends (obtenir le même 0xeeeeffff
divisé en 4 éléments distincts). Quel est le problème avec le code?Comment itérer sur un tableau en interprétant son élément comme un type différent?
short *arr = malloc(sizeof(short) * 2);
*arr = 0xeeee;
*(arr + 1) = 0xffff;
printf("%p\n", &arr[0]);
printf("%p\n", &arr[1]);
// convert
char * cnv = (char *)arr;
printf("=======\n");
for (int i = 0; i < 4; i++) {
printf("%p\n", cnv);
printf("%x\n", *cnv);
cnv++;
}
La sortie:
0x759010
0x759012
=======
0x759010
ffffffee # expect 'ee'
0x759011
ffffffee # expect 'ee'
0x759012
ffffffff # expect 'ff'
0x759013
ffffffff # expect 'ff'
'short' et' char' passés à printf via '...' sont passés comme 'int's. C'est comme ça que ça fonctionne ... Vous devez utiliser '"% hhx "' pour interpréter ce 'int' comme un caractère (dans gcc de toute façon). – Arkadiy