结构:
结构是程序员自己设计的一种数据类型,用于描述一个事物的各项信息,
由若干个不同的基础数据类型组成
设计:
struct 结构名(自己起名字)
{
类型 成员名;
/* data */
};
定义结构变量:
(struct 结构名)结构变量名;
注意:定义结构变量,不能省略struct
定义结构变量并初始化:
struct 结构名 结构变量名 = {v1,v2,v3...};
注意:要根据结构设计成员的顺序依次赋值
struct 结构名 结构变量名 ={.成员名=v3,.成员名=v2...};
注意:只初始化某些成员,可以乱序初始化
注意:同类型的结构变量相互直接整体赋值或初始化
访问结构成员:
结构变量名.成员名;
结构指针->成员名;
结构作为函数形参时:
由于结构变量的字节数普遍较大,普通结构变量的值传递效率较低
因此建议传递结构指针,如果不需要修改结构变量的值,可以用const保护
typedef重定义结构类型:
typedef struct 结构名 结构名;
之后定义结构变量就可以不加struct
typedef struct 结构名
{
...
}结构名;
之后定义结构变量就可以加struct
注意:
一般结构题变量建议存放在堆内存
malloc(sizeof(结构名*个数));
如何计算结构的字节数:
结构成员的顺序会影响结构的总字节数,因此在设计结构时
如果成员的顺序安排合理可以大大节约内存
内存对齐:
假设第一个成员从零地址开始,存储每个成员的地址编号
必须能被他的类型字节数整除,如果不能整除,则会填充一些
空白字节
内存补齐;
结构的总字节数,必须能被他的最大成员的类型字节数整除
如果不能整除那么在末尾填充一些空白字节
注意:
在Linux系统下,计算结构的对齐补齐时,如果成员的字节数超过4字节则按
4字节计算
在windows下哦啊按实际情况对齐补齐
#pragma pack(n) 设置对齐、补齐的最大字节数
n==1\2\4