第16章 结构、联合和枚举
{% markmap %}
第16章 结构、联合和枚举
结构
- 结构变量
- 结构变量的特点
- 1、结构的元素具有不同的类型
- 2、访问结构成员需要指定结构成员的名字
- 结构变量的声明
struct {
int number;
char name[NAME_LEN+1];
int on_hand;
} part1, part2;- 结构体内的成员变量不会和其他结构体冲突(独立的作用域)
- 结构变量的初始化
struct {
int number;
char name[NAME_LEN+1];
int on_hand;
} part1 = {528, "Disk drive", 10},
part2 = {914, "Printer cable", 5};- 新节点
- 指定初始化
{.number = 528, .name = "Disk drive", .on_hand = 10}
- 访问结构体成员
printf("Part number: %d\n", part1.number);
printf("Part name: %s\n", part1.name);
printf("Quantity on hand: %d\n", part1.on_hand);- 如果是指针,采用
->
- 结构变量的特点
- 结构类型
- 结构标记的声明
struct part {
int number;
char name[NAME_LEN+1];
int on_hand;
};- 通过结构标记声明结构变量
struct part part1, part2;
- 结构类型的定义
- 通过
typedef进行重命名 typedef struct {
int number;
char name[NAME_LEN+1];
int on_hand;
} Part;- 使用重命名的结构类型声明结构变量
Part part1, part2;
- 通过
- 结构标记的声明
- 嵌套结构
- 将一个结构体嵌套到另一个结构体里面
- 结构数组
- ⭐ 字节对齐
联合
- 联合的声明和定义
- 和结构类似
- 用途
- 使用联合来节省空间
- 使用联合来构造混合的数据结构
typedf union {
int i;
double d;Number number_array[1000];number_array[0].i = 5; number_array[1].d = 8.395;
- 联合和结构组合(为联合添加标记)
#define INT_KIND 0
#define DOUBLE_KIND 1
typedef struct {
int kind; /* tag field */
union{
int i;
double d;
} u;
} Number;n.kind = INT_KIND;
n.u.i = 82;
枚举
- 当变量的值是固定的几个时
- 枚举变量的声明和定义
enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};enum suit s1, s2;
- 枚举类型的重定义
typedef enum {CLUBS, DIAMONDS, HEARTS, SPADES} Suit;
Suit s1, s2;
- 枚举作为整数
enum suit {CLUBS = 1, DIAMONDS = 2, HEARTS = 3, SPADES = 4};enum dept {RESEARCH = 20, PRODUCTION = 10, SALES = 25};
- 联合结构枚举组合(为联合添加标记)
typedef struct {
enum {INT_KIND, DOUBLE_KIND} kind;
union {
int i;
double d;
} u;
} Number;

浙公网安备 33010602011771号