为什么给定的代码会提供以下输出。
#include <stdio.h>
int main(void)
{
int x = 0x12345678;
unsigned short *p = &x;
unsigned char *q = &x;
printf("%x %x\n",*p++,*p++);
printf("%x %x %x %x\n",q[0],q[1],q[2],q[3]);
return 0;
}
输出:
1234 5678
78 56 34 12
而不是:
1234 5678
12 34 56 78
我觉得可能是答案的结果是架构的结尾必然导致它。但我无法理解如何,因为整个4-byte
必须以连续的方式存储。
也不是*q++
和*(q+1)
指向同一地址?
答案 0 :(得分:1)
*q++
和*(q + 1)
未指向相同的内存位置。在评估表达式后,*q++
将指向q
之后的下一个内存位置。
你得到78 56 34 12而不是12 34 56 78的原因与字节序有关;在内存中,int
可能会存储为78563412
。尝试用x & 0xff, (x >> 8) & 0xff, (x >> 16) & 0xff, (x >> 24) & 0xff
替换printf语句中的q [0]到q [3],看看你是否得到了预期的结果。