结构体:
结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量
结构体的声明
struct tag //struct 结构体关键字 tag 结构体标签 struct tag 结构体类型
{
member_list; //成员变量
}variable_list; //可以直接创建全局变量,一般不用
typedef 给结构体重命名
例如:
struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}s1,s2,s3; //s1 s2 s3 三个全局变量,不建议这样使用
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}stu;
{
//局部变量
struct Stu stu1;
struct Stu stu2;
stu stu3;
}
结构体成员的类型
可以是标量、数组、指针,甚至是其他结构体
结构体内存对齐:
- 第一个成员在与结构体变量偏移量为0 的地址
- 其他成员变量要对齐到某个数字(对齐数)的整数倍地址
- 对齐数:编译器默认一个对齐数,与该成员大小的较小值(vs默认是 8 )
- 在对齐方式不合适的时候,可以更改默认对齐数 #pragma pack(修改值)
为什么存在内存对齐:为了访问未对齐的内存,处理器需要做两次内存访问,而对齐的内存访问只需要一次访问(拿空间换取时间)
结构体传参,传地址,用指针接收