short
(合計4バイト)のメモリが割り当てられたarr
アレイがあります。それから、私はffff
とeeee
に応じてこれらの2つの要素を埋めます。私が4に割り当てられたのと同じ割り当てられたメモリを反復しようとした後char
(合計で4バイト、しかし今は1バイトで要素を調べることができると思います)出力からわかるように、私は何を期待しているのかわかりません(同じ0xeeeeffff
を4つの別々の要素に分割してください)。コードの何が間違っていますか?配列を反復処理して要素を異なる型として解釈する方法は?
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++;
}
出力:
0x759010
0x759012
=======
0x759010
ffffffee # expect 'ee'
0x759011
ffffffee # expect 'ee'
0x759012
ffffffff # expect 'ff'
0x759013
ffffffff # expect 'ff'
'short'と' char'はprintfに '...'を介して渡され、 'int'sとして渡されます。それが '...'の仕組みです。 ''%hhx "'を使用して、 'int'をcharと解釈する必要があります(とにかくgccで)。 – Arkadiy