一.结构体数据类型
1.结构体数据类型的定义
struct 结构体类型名
{
数据类型1 变量1;
数据类型2 变量2;
数据类型3 变量3;
};
struct Date
{
int year;
int month;
int day;
};
typedef:定义一个类型别名
typedef 类型名 类型别名;
typedef struct student
{
char name[32];
char sex;
int age;
float score;
}stu_t;
2.结构体数据类型的变量定义
struct 结构体类型名 变量名;
类型别名 变量名;
struct student stu0, stu1;
struct student
{
char name[32];
char sex;
int age;
float score;
}stu4, stu5;
3.结构体数据类型变量的初始化
1.全部初始化
stu_ t stu2 = {"zhangsan",'j',28,59.9};
struct datetime dt0 = {{2023,11,8},{14,23,30}};
2.局部初始化
struct datetime dt1 = {
{
.year = 2023,
.day = 8
},
{
.hour = 14,
.sec = 30
}
};
4.结构体数据类型变量的访问:
通过结构体变量名访问结构体内部的成员时"."(结构体成员运算符)
通过指向结构体变量的指针访问结构体内部成员变量时"->"(指向结构体成员运算符)
5.重点
内存对齐原则:
1.结构体的成员变量分配在内存中的起始地址一定是自身基本数据类型整数倍的地址编号;
2.结构体的大小必须是自身最大数据的整数倍;
3.32位 4字节对齐,64位 8字节对齐
4.强制n字节对齐
#pragma pack(n)
二.枚举型
enum 类型名
{
枚举常量1,
枚举常量2,
枚举常量3,
};
三.共用体
1.共用体类型定义
union 类型名
{
数据类型1 变量名1;
数据类型2 变量名2;
数据类型3 变量名3;
....
数据类型4 变量名4;
};
2.共用体类型变量的定义
union 共用体类型名 变量名;
union student stu0, stu1;
union student
{
char ch;
short sh;
int in;
}stu4, stu5;
共用体和结构体的区别
结构体成员在内存中空间独立;
共用体成员再内存中空间共享;
判断内存大小端:
主机字节序:
处理器在存取处理内存中的数据时的字节顺序;
大端存储:地址低位保存数据高位;
小端存储:地址低位保存数据低位;