结构体包含着一个对象所有信息,通过定义结构体可将对象实例化
结构体定义格式:
//对象
typedef struct
{
char name[100];
int age;
} teacher_t;
//对象实例化/申明结构体变量并进行初始化
teacher_t yy_teacher =
{
.name = "ksh", //初始化列表,编译器会从.name这个地址开始,写入"ksh"这个字符串,但普通赋值语句(yy_teacher.name = "ksh";)不行,普通赋值语句是一个指针
.age = 25,
};
结构体内存对齐: 规则: 结构体成员变量的地址得是自身数据类型所占用字节的整数倍; 结构体占用总字节数是自身最大成员变量数据类型所占用字节数的整数倍; 结构体成员变量结构体,这个成员变量结构体起始地址得和自身成员变量数据类型所占用最大字节数对齐;
typedef struct
{
char name[100];
int age;
} teacher_t; 104个字节
typedef union
{
char name[100];
int age;
} people_t; 100个字节
typedef union
{
ERR_CODE_UNREADY,
ERR_CODE_OFFLINE,
} err_code_t; 4字节
typedef struct
{
int a; //0 ~ 7
double b; //8~15
char c; //16~19
int d[5]; //20~39
int *e; //40~47
teacher_t f;//48~161
people_t g; //162~261
err_code_t h;//262~265
} test_t;
266字节,得被8整除