ref https://www.runoob.com/cprogramming/c-unions.html
枚举
C语言中当作int或unsigned int类型处理, 按C规范不能遍历枚举
enum DAY // 先定义枚举类型, 再定义枚举变量
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
enum DAY // 定义枚举类型同时定义枚举变量
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}day;
enum // 省略枚举名, 直接定义枚举变量
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}day;
printf("%d",Thu);
结构体
定义
struct Time // 结构体标签
{
uint16 year;
uint08 month;
uint08 day;
uint08 hour;
uint08 minute;
uint08 second;
}TimeStamp; // 结构变量
struct // 声明变量s1, 不标明标签
{
// ...
}s1;
struct SIMPLE // 声明结构体, 有标签, 无变量
{
// ...
};
struct SIMPLE t1, t2[20];
typedef struct
{
// ...
}s2
嵌套
struct COMPLEX
{
char string[100];
struct SIMPLE a;
}
struct B; // 相互嵌套需先对其一进行声明
struct A{
struct B *partner;
}
struct B{
struct A *partner;
}
作为参数
void printBook(struct Books book)
{
printf("%d",book.title);
}
指针
struct Books *struct_pointer; // 定义指向结构的指针, 同定义其他类型指针
tsruct_pointer = &Book1; // 传入结构体地址
struct_pointer->title // ->访问成员
void printBook(struct Books *book)
{
printf("%d", book->title);
}
printBook(&Book2);
共用体
允许在相同的内存位置存储不同数据类型, 任何时候只能有一个成员带值, 占用的内存为共用体中最大的成员
union Date
{
int i;
float f;
char str[10];
}data;
union Data data;
data.f = 220.5;