结构体与枚举

一、结构体

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 代替 1SUCCESS 代替 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. 枚举的优势

  1. 可读性:用名称(如 SUCCESS)代替数字(如 0),代码更易理解。
  2. 安全性:限制变量只能取预定义的值,避免无效值(如星期不会出现 8)。
  3. 可维护性:修改枚举成员时,无需在代码中到处修改数字,只需调整枚举定义。

为什么要进行内存对齐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值