c语言学习笔记之结构体和枚举

结构体

1、基本概念

构造类型:由已有的数据类型构成类型

  1. 数组:多个同种类型的数据构成的那么一种类型

    特点:只能存放一种数类型

  2. 结构体:从来存放表示某种特定含义的一组数据,是对数据的封装而函数是对功能封装。

    好处:提高代码的可读性 提高数据易用性
    提高代码可维护性

2、结构体的定义

  // 定义结构类型
  struct 结构类型名称{
        成员类型 成员名称;
         ...
  };//必须加分号

 // 通过结构体类型定义结构变量
 struct 结构类型名称 结构体变量名称;

注意:结构体名称大写(命名规范)

3、定义结构体变量的多种方式(掌握)

第一种方式

struct Person{
    int age;
    double height;
};
struct Person p1;

即:

  1. 先定义结构体类型
  2. 定义结构变量

第二种方式:

struct Person{
    int age;
    double height;
} p1,p2;

即:

  • 定义结构体类型的同时定义结构变量

注意:

  • 结构体类型定义是不可以重名的

  • 数组名称是不可以改变的

    int nums[5];
    nums =(int[5]){1,2,3,4,5};// 错误

4、 结构体初始化

方式一:一一赋值

p1.age = 10;
p1.name = "xx";
p1.height = 1.3;

方式二:整体赋值
赋值的时候,{}中元素的顺序与定义结构体时成员顺序相同

p1 = (struct Person){20,"小明",2.0};

方式三:在定义结构体的时候赋值

struct Person{
    int age;
    double height;
} p1{20,1.75}};

5、结构体与普通变量的区别

  • 除了结构体没有声明外,其他的都一样
  • 用法区别:struct Person 和 int使用是一样的

6、结构体的存储细节(理解)

  • 结构体本身不占用存储空间,如同int一样
  • 为了快速访问变量,结构体内部有一个补齐算法,默认情况下它一定是占用存储空间最大成员的倍数(一定是偶数)
  • 我们自己指定结构体占用的空间:

例:

//指定一组占用多少字节
#pragma pack(8)

7、结构体类型的作用域(掌握)

和变量一样,即

  • 在函数内部,结构类型作用域就如同局部变量一样
  • 在外边定义的结构体类型像全局变量的作用域
  • 作用域:从定义的那一行开始直到文件的结束

二、结构体数组

数组元素为结构体数组

1、定义结构体数组

结构类型 数组名称[元素个数];

2、结构体数组初始化

  1. 先定义结构体数组然后初始化
  2. 定义结构体数组的同时进行初始化

3、使用

如同int数组一样使用

注意:

  • 一般情况下结构体类型都是定义在函数的外部
  • 如果没有显式初始化的结构体,那么这个结构体中所有成员都会被初始化为0

四、结构体指针

指向结构体的指针

1、定义结构体指针

格式:

结构类型 * 指针变量名称;

如:

struct Student stu = {"大木",60,59};
//  定义结构体指针
struct Student *sp1;
sp1 = &stu;

//  定义的同时进行初始化
struct Student *sp = &stu;

2、通过指针访问结构体成员

// 第一种方式:通过指针访问结构体的成员的
(*sp).score = 60;

// 第二种方式(重点)
sp->name = "小木";
sp->no = 59;

五、结构体嵌套

1、 结构体不可以嵌套自己,不能有字节这种类型的成员

2、结构体可以嵌套自己类型的指针

六、结构体与函数

1、结构体变量作为函数参数是值传递

2、结构体指针作为函数参数是地址传递

3、结构体数组作为函数参数是地址传递

七、枚举

一个个列出来,穷举

1、枚举作用:消除魔法数字

2、使用场景:当某个东西只有那么几个取值时候就是用枚举

3、定义枚举格式

 enum 枚举类型的名称{
 元素,//逗号
 ...
 };

如:

//定义性别枚举类型
enum Sex{
     Man,
     Woman,
     Other
};

注意:

  1. 枚举定义之后,后面不可定义与成员相同名称的
  2. 这里不能把要给数字赋值给一个枚举类型的变量,这样枚举存在的意义就没了
  3. 可以指定枚举中每一个元素值,如果前面的元素指定了值后面元素没有指定值则是前面元素的值加1,

如:

enum Season{
   Spring = 2,
   Summer,
   Autumn,
   Winter,
   SOther = 9
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值