返回首页   进站必读

5.1 结构体的定义


5.1 结构体的定义

5.1.1 定义一个员工的结构体

struct employee{
    int ID;
    char name[20];
    int wage;
};

5.1.2 用上述结构体定义两个员工。

struct employee xiaozhang, xiaoli;

这样就定义了两个结构体变量,xiaozhang和xiaoli。

5.1.3 用typedef定义类型

每次定义都输入struct employee比较繁琐,可以用typedef定义为类型。这样用 起来就比较方便了。

typedef struct employee employee_t;

这样在定义是只要输入

employee_t xiaozhang, xiaoli;

在用typedef定义类型时,最好在类型名后加一个_t。

5.1.4 结构体的对齐

先做一个实验:

    struct s{
            int x;
            int y;
    }

用sizeof()打印出struct s的大小,应该输出8

    struct s{
            char x;
            int y;
    }

用sizeof()打印出struct s的大小,仍然输出8。
这是什么原因呢?这个就是结构体的对齐规则。
在内存中要进行4字节对齐。
为什么要进行字节对齐呢?
内存空间是按照字节业划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位置开始说。这样就决定了各种数据类型只能按照相应的规则在内存空间中存放,而不能一个接一个的顺序排列。