-
共用体
- 共用体是c中的一种数据结构,他的定义方法和使用方法与结构体相同,只需要在定义类型时将struct换为union即可
- 与结构体不同的是,联合体中的内存空间是所有成员共用的,公用体的大小取决于共用体中最大的成员大小,共有体没有对齐机制,即使当联合体最大成员大小不足4字节的倍数,编译器也不会自动填充对齐
- 使用联合体一般只是为了方便开发者阅读,其成员类型代表了将会以何种方式解析这段内存数据,同样的使用强制类型转换也可以做到同样的效果
-
大小端
- 大小端指的是芯片在存储数据中采用的格式
大段对应高地址存放低字节
小端对应高地址存放高字节
51内核架构的芯片采用的就是大端模式
ARM芯片采用的就是小端模式
通过使用共用体和指针可以测试出当前机器使用的是大端还是小端 - 测试代码的实现
- 大小端指的是芯片在存储数据中采用的格式
union u1{
int a ;
char b;
};
//共用体的方式本质还是通过指针实现检测
//由于在int类型强制转换为char型时,会将高字节数据全部截掉,所以可以检查低地址中存放的是不是1
//如果发现被截取掉了,则是大端,低字节存放在高地址中,反之则是小端
union u1 uni1;
uni1.a = 1;
printf("%d\n",uni1.b);
//指针方式
int a = 1;
ptr = &a;
printf("%d\n",*ptr);
- 枚举
- 枚举也是一种数据结构,其作用与宏定义相似,都是为了减少阅读障碍,提高程序的可读性
- 枚举实际上就是定义了一堆类型为unsigned int的全局变量,成员的大小默认从0开始,依次增加,如果只修改某一个成员的值,那么后面的成员则会以定义值为基数增加