C语言提供了结构体用来提高表示数据的能力,它能让你创造新的形式。
需要掌握3个部分:
1、为结构体建立一个格式或样式
2、声明一个适合该样式的变量
3、访问结构变量的各个部分(成员member或字段field)
1. 结构体类型定义
结构类型定义描述了一个结构体的组织布局。不分配实际内存。
#define MAXTITL 41 // 书名的最大长度
#define MAXAUTL 31 // 作者名字的最大长度
// 普通定义,需要结合struct关键字使用
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
//typedef定义,创建别名,可以省略struct关键字
typedef struct {
char title[MAXTITL];
char author[MAXAUTL];
float value;
}book;
2. 结构体变量
2.1 声明
结构体变量声明是基于已定义的类型创建具体变量(类似根据图纸造房子),此时会分配内存。一般有三种方式:
1、使用已经定义的结构体类型模板
struct book p; // 使用普通定义的类型(需写struct)
book p; // 使用typedef定义的类型(无需struct)
2、定义结构体类型的时候进行变量声明
// 普通定义,需要结合struct关键字使用
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
}p;
3、直接声明匿名结构体变量(很少用,无法复用类型)
struct {
char title[MAXTITL];
char author[MAXAUTL];
float value;
}p;
2.2 初始化
主要有两种基本的初始化方式。
1、顺序初始化,
struct Point {
int x;
int y;
};
// 初始化方式1:按顺序初始化所有成员
struct Point p1 = {10, 20};
// 初始化方式2:部分初始化(C89标准支持,未指定的成员自动初始化为0)
struct Point p2 = {5}; // 等价于 {5, 0}
2、使用初始化器。
C99和C11为结构体提供了指定初始化器
// 初始化方式3:通过成员名指定初始化(C99及以后)
struct Point p3 = {.y = 30, .x = 20}; // 顺序可乱,结果:x=20, y=30
// 初始化方式4:混合使用(先顺序,后指定)
struct Point p4 = {1, .y = 2}; // x=1, y=2
2.3 访问结构成员
结构体使用成员运算符(.)访问结构体中的成员。
printf("p3:(x:%d, y:%d)", p3.x, p3.y); //输出:p3:(x:20, y:30)
11万+

被折叠的 条评论
为什么被折叠?



