打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

时间:2023-03-08 22:35:07
打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

此文章参考《深入理解计算机系统》P31。

先看如下代码:  12345的十六进制表示为:0x00003039

 #include <stdio.h>

 int main()
{
int a = ;
char *q = (char *)(&a);
for(int i = ; i < sizeof(a); ++i)
printf("%.2x ", q[i]);
return ;
}

输出为:打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

a的地址是int*类型,其对象是int型的4字节的12345,当其强制转换成unsigned char*类型的q时,由于char是1个字节,所以其对象会被一个字节一个字节的拆分,由于内存中是小端存储( 低地址存低位,高地址存高位),所以q[0]是4字节的12345在内存中的第一个字节,依次类推(12345所占的4个字节被强制拆成了4个单字节的存储),所以最后输出为 39 30 00 00 。