结构体对齐规则:
1.第一个成员在结构体变量偏移量为0的地址处
2.其他成员变量要对齐到对齐数的整数倍的地址处
对齐数=编译器默认对起数 和 成员字节大小中的较小值
3.结构体总大小为最大对齐数的整数倍 (每个成员变量都有一个对齐数)
4.嵌套结构体情况下,(嵌套结构体对齐到自己的最大对齐数的整数倍)结构体的整体大小为所有对齐数(含嵌套结构体的对齐数)的整数倍
位段:
位段类似结构体 位段成员后有冒号和一个数字
位段成员必须是int unsigned int signed int三种类型
位段是不跨平台的 可移植程序应避免使用位段
枚举 :
枚举一般用于一种属性的不同类型 比如
颜色的红绿蓝三种 ,礼拜中的礼拜一;二;三 ....日
或者性别中的 男女 阴阳等等
而结构体 是一个物体的不同属性 如学生这个结构体
要形容学生 有姓名 ,年龄,性别,分数等
用#define 定义常量就可以 为什么还要使用枚举呢?
枚举的优点:
1.增加代码的可读性和可维护性
enum Color
{
RED = 5,
GREEN = 9,
BLUE
};
这里的red就是5,后面代码中red就是5,出现green就是9, blue就是10
2.enum定义的标识符相对于#define 更加严谨 枚举有类型检查
3.防止命名污染
4.便于调试(test.c 变成test.exe可执行文件之前)要经过预编译 编译 汇编 链接
在编译过程中枚举的成员看到的和调试的是一样的 更便于调试
5.使用起来更加方便 一个color可以定义多个常量 红橙黄绿蓝靛紫
联合体:
联合体中成员于结构体不同他们是公用一块地址 都从首地址开始
s和i 中较大值便是该联合体字节大小