一、结构体
1. 结构体的基本概念
- 定义:结构体是一种用户自定义的数据类型,允许将多个不同类型的变量(称为成员)打包在一起,形成一个新的复合类型。
- 用途:用于表示具有多个相关属性的实体(如学生、商品、坐标等),使数据组织更清晰。
- 特点:结构体中的成员可以是基本数据类型(int、float 等),也可以是其他结构体或指针
2. 结构体的定义与声明
// 定义学生结构体
struct Student {
char name[20]; // 姓名
int age; // 年龄
float score; // 成绩
};
// 声明结构体变量 struct Student stu1; // stu1是Student类型的变量
注意:
typedef struct strudent {
unsigned int id;
bool isused;
char name[20];
}ccc,*ggg; //这个ccc是一个新的(全局)变量,前面相当于以前的int。
// strcpy((*ggg).name , yyy); 这是 指针变量 的用法
// }HHH; 若前有typedef,则现在HHH也是这个结构体的名字
3. 结构体成员的访问
p->age 等价于 (*p).age
①、通过 . 运算符 访问结构体变量的成员:
// 给结构体成员赋值
strcpy(stu1.name, "Alice"); // 字符串赋值需用strcpy
stu1.age = 18; stu1.score = 95.5;
// 访问成员并输出
printf("姓名:%s,年龄:%d,成绩:%.1f\n", stu1.name, stu1.age, stu1.score);
②、如果是结构体指针,则使用 -> 运算符:
struct Student *p = &stu1; // 结构体指针指向stu1
p->age = 19; // 等价于 (*p).age = 19
4. 结构体数组
结构体可以组成数组,用于存储多个同类型的结构体变量:
// 定义学生数组
struct Student class[3] = {
{"Alice", 18, 95.5},
{"Bob", 19, 88.0},
{"Charlie", 20, 92.5}
};
// 访问数组中的结构体成员 printf("第2个学生:%s,%d岁\n", class[1].name, class[1].age);
5.位断
struct room
{
unsigned int roomid : 9; //用九个比特位(从最右边开始数) int有4字节,32个比特位 unsighed符号位空着,可以给别人用
unsigned int price : 9; //接着刚才的地方再数九个使用
unsigned bool isfree : 1;
};
二、枚举
1. 枚举的基本概念
- 定义:枚举是由一组命名的整数常量组成的类型,每个成员都有一个默认的整数数值(从 0 开始递增),也可以手动指定。
- 用途:替代魔法数字(无意义的数字常量),使代码更清晰(例如用
MONDAY代替1,SUCCESS代替0)。 - 特点:枚举成员是常量,定义后不可修改;枚举类型的变量只能取枚举中定义的成员值。
2. 枚举的定义与使用
// 定义枚举类型
enum 枚举名 {
成员1, // 默认值为0
成员2, // 默认值为1(前一个成员+1)
成员3, // 默认值为2,以此类推
// ... 更多成员
};
举例:
// 定义枚举类型
enum Weekday enum Weekday {
MONDAY, // 0
TUESDAY, // 1
WEDNESDAY, // 2
THURSDAY, // 3
FRIDAY, // 4
SATURDAY, // 5
SUNDAY // 6
};
// 声明枚举变量(只能取枚举中的成员值)
enum Weekday today;
// 给变量赋值
today = MONDAY;
typedef在枚举的应用:(和结构体很像)
// 定义枚举并起别名
typedef enum {
RED,
GREEN,
BLUE
} Color; // Color 是枚举的别名
// 直接用别名声明变量
Color favorite = BLUE;
3. 自定义枚举成员的值
枚举成员的默认值从 0 开始递增,但可以手动指定具体数值(整数),未指定的成员会在前一个成员的基础上 + 1。
enum Status {
ERROR = -1, // 手动指定为-1
SUCCESS, // 自动为0(-1 + 1)
RUNNING = 5, // 手动指定为5
PAUSED // 自动为6(5 + 1)
};
- 赋值必须是整数(可正可负)
4. 枚举的优势
- 可读性:用名称(如
SUCCESS)代替数字(如0),代码更易理解。 - 安全性:限制变量只能取预定义的值,避免无效值(如星期不会出现
8)。 - 可维护性:修改枚举成员时,无需在代码中到处修改数字,只需调整枚举定义。
为什么要进行内存对齐:

1629

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



