struct employee{
int ID;
char name[20];
int wage;
};
struct employee xiaozhang, xiaoli;
这样就定义了两个结构体变量,xiaozhang和xiaoli。
每次定义都输入struct employee比较繁琐,可以用typedef定义为类型。这样用 起来就比较方便了。
typedef struct employee employee_t;
这样在定义是只要输入
employee_t xiaozhang, xiaoli;
在用typedef定义类型时,最好在类型名后加一个_t。
先做一个实验:
struct s{
int x;
int y;
}
用sizeof()打印出struct s的大小,应该输出8
struct s{
char x;
int y;
}
用sizeof()打印出struct s的大小,仍然输出8。
这是什么原因呢?这个就是结构体的对齐规则。
在内存中要进行4字节对齐。
为什么要进行字节对齐呢?
内存空间是按照字节业划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位置开始说。这样就决定了各种数据类型只能按照相应的规则在内存空间中存放,而不能一个接一个的顺序排列。