int main()
{
unsigned int a= 0x1234;
unsigned char b=*(unsigned char *)&a;
printf("%x\n" , b);
return 0;
}
问在32位大端模式处理器上变量b等于多少?
解:
首先看*(unsigned char *)&a,这表示先取a的地址然后强制转换成char的指针,然后求指针的引用,也就是求这个指针指向的值,然后再看unsigned int a
unsigned int a= 0x1234的32位完全表示是0x00001234,在大端(低地址存储高位)处理器上的存储方式为:
由低地址到高地址依次为(假设低地址为0x4000):
0x4000 0x4001 0x4002 0x4003
00 00 12 34
则&a的值为0x4000, char占一个字节,即b最终所取的值为0x4000地址内存储的内容,故为0x00。
若处理器为小端 (低地址存储低位) 模式,则b的值为0x34。