有两个short
s(总共4个字节)的分配内存arr
阵列。然后我相应地用这两个元素填充ffff
和eeee
。在我试图遍历与分配给4 char
s相同的分配内存之后(总共也是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'
通过'...'传递给printf的'short'和'char'作为'int'传递。这就是'...'的作用。你需要使用'“%hhx”'来将'int'解释为字符(无论如何gcc)。 – Arkadiy