C在使用指针的时候,打印不同类型,得出的数据往往是一部分,下面通过一段代码来展示(头文件略)
代码
int main(void) {
int a = 0x12345678; //定义整型类16进制数
int *p = &a; //int型指针
printf("%x\n", *p);
char *p2 = (char*)&a; //char类型
printf("%x\n", *p2);
short *p3 = (short*)&a; //short类型
printf("%x\n", *p3);
return 0;
}
我们得到如下结果
12345678
78
5678
发现三次打印结果不同(后两次仅是片段),为什么会这样呢?
首先我们要了解一下大小端,这跟你的处理器有关系
处理器
- 大端
- 小端
ARM/Intel,数据有由高位向低位读取
至于储存位置我们下面用一张图表示
储存位置
读取数据时有高位向低位,又因为十六进制,1位相当于4位二进制数。
所以我们通过p指针时,目标和指针类型相同,所以可以全部打印
然而char类型,只能读取78
short类型只能读取7856
我们在使用指针时要十分注意!