嵌入式学习-01C语言day10

这篇博客详细介绍了C语言中的自定义数据类型,包括枚举、结构体、共用体的定义、使用和应用场景。枚举用于定义一组相关常量,结构体用于组合不同类型的值,共用体则允许多个属性共享同一内存空间。此外,还讲解了C语言中的动态内存分配,包括malloc、calloc、realloc和free函数的使用,以及内存分配的基本原则和注意事项。
摘要由CSDN通过智能技术生成

嵌入式学习-01C语言day10

1 自定义数据类型

1.1 枚举

1.1.1 什么是枚举

枚举(Enumeration)是C语言中的一种用户自定义数据类型,用于定义一组相关的常量。枚举使我们可以为这些常量分配有意义的名字,从而提高代码的可读性和可维护性。

1.1.2 定义枚举

1)语法格式

枚举使用 enum 关键字来定义,枚举名称和枚举元素名称都是标识符,定义一个枚举就是定义了一种枚举数据类型,语法如下:

enum 枚举名称 

{

  枚举元素1,

  枚举元素2,

  ...

  枚举元素N

};

2)枚举常量

枚举元素也称为枚举成员或枚举常量,具有如下特点:

(1)枚举元素的值必须在同一枚举中是唯一的

(2)枚举元素的值必须是整数类型,通常是int

(3)如果没有为枚举元素指定值,编译器会自动为它们分配值,从0开始,依次递增。

(4)定义枚举的时候也可以为枚举元素自定义值,需保证唯一性和整型类型。

3)代码演示

// 定义枚举类型,表示星期一到星期天,枚举元素的值自动分配,从0到6。

enum Weekday

{
   

  MONDAY,

  TUESDAY,

  WEDNESDAY,

  THURSDAY,

  FRIDAY,

  SATURDAY,

  SUNDAY

};
// 定义枚举类型,表示北京地区一年四季的平均温度。为每个枚举元素都设置值,自己设置的值需要保证唯一性和整型类型

enum Season 

{
   

  SPRING = 18,

  SUMMER = 30,

  AUTUMN = 20,

  WINTER = -5

};

1.1.3 枚举变量

1)什么是枚举变量

定义变量时指定类型是我们所定义的枚举类型,该变量称为枚举变量。枚举变量的值应该是枚举类型中的枚举常量中的一个,不能是其他值。

2)定义枚举变量的语法

(1)第一种:先定义枚举类型,再定义枚举变量。

// 定义枚举类型

enum DAY 

{
   

  MON = 1, 

  TUE, 

  WED, 

  THU, 

  FRI, 

  SAT, 

  SUN

}; 

// 使用枚举类型定义枚举变量

enum DAY day;

(2)第二种:定义枚举类型的同时声明枚举变量。

enum DAY 

{
   

  MON = 1, 

  TUE, 

  WED, 

  THU, 

  FRI, 

  SAT, 

  SUN

} day;

(3)第三种:定义枚举类型的同时声明枚举变量,且省略枚举名称。

enum 

{
   

  MON = 1, 

  TUE, 

  WED, 

  THU, 

  FRI, 

  SAT, 

  SUN

} day;

1.1.4 枚举的应用

1)枚举遍历

如果枚举常量的值是连续的,我们可以使用循环遍历;如果枚举常量的值不是连续的,则无法遍历。

#include <stdio.h>

 

int main()

{
   

  // 定义枚举类型同时定义枚举变量

  enum Weekday

  {
   

​    MONDAY = 1,

​    TUESDAY,

​    WEDNESDAY,

​    THURSDAY,

​    FRIDAY,

​    SATURDAY,

​    SUNDAY

  } day;

 

  // 使用循环遍历出所有的枚举常量

  for (day = MONDAY; day <= SUNDAY; day++)

  {
   printf("%d \n", day);

  }

 

  // 如果枚举常量的值并不是连续的数字,则无法遍历

  // 定义枚举类型同时定义枚举变量

  enum Season

  {
   

​    SPRING = 18,

​    SUMMER = 30,

​    AUTUMN = 20,

​    WINTER = -5

  } season;

 

  for (season = SPRING; season <= WINTER; season++)

  {
   printf("%d \n", season);

  }

 

  return 0;

}

输出结果:

1 

2 

3

4

5

6

7

2)在switch中使用

枚举可以与switch结合使用,请看如下案例:

#include <stdio.h>

 

int main()

{
   

  // 定义枚举类型

  enum SEASONS

  {
   

​    SPRING = 1,

​    SUMMER,

​    AUTUMN,

​    WINTER

  };

 
  // 定义枚举变量

  enum SEASONS season;

 

  // 获取用户输入

  printf("请输入你喜欢的季节: (1. spring, 2. summer, 3. autumn 4 winter): ");

  scanf("%d", &season);

 

  // 判断

  switch (season)

  {
   

  case SPRING:printf("你喜欢的季节是春天");break;

  case SUMMER:printf("你喜欢的季节是夏天");break;

  case AUTUMN:printf("你喜欢的季节是秋天");break;

  case WINTER:printf("你喜欢的季节是冬天");break;

  default:printf("你没有选择你喜欢的季节");

  }


  return 0;

}

1.2 结构体

1.2.1 什么是结构体

C语言提供了struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起,这种类型称为结构体(structure)类型。

C语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。

1.2.2 声明结构体

1)格式

构建一个结构体类型的一般形式为:

struct 结构体名

{ 

  数据类型1 成员名1;  

  数据类型2 成员名2; 

  ……

  数据类型n 成员名n;

};

1.2.2 声明结构体变量

1)方式1 先定义结构体,然后再创建结构体变量

// 定义结构体

struct Student

{
   

  int id;      // 学号

  int age;      // 年龄

  char *name;    // 姓名

  char gender;    // 性别

  char *address;   // 家庭住址

};


// 定义结构体变量

struct Student stu1,stu2;

2)方式2 在定义结构体的同时定义结构体变量

// 定义结构体的同时定义 stu1和 stu2 两个变量

struct Student

{
   

  int id;      // 学号

  int age;      // 年龄

  char *name;    // 姓名

  char gender;    // 性别

  char *address;   // 家庭住址

} stu1, stu2;

3)方式3 在定义时也可以不给出结构体名

// 不给出结构体的名字

struct

{
   

  int id;      // 学号

  int age;      // 年龄

  char *name;    // 姓名

  char gender;    // 性别

  char *address;   // 家庭住址

} stu1, stu2;

注意:在C语言中,结构体(struct)和结构体变量是两个不同的概念。

(1)结构体是一种自定义的数据类型,像一种模板,定义了数据的格式。

(2)结构体变量是根据结构体类型创建的变量,代表了一个具体的对象,用于存储数据。

1.2.3 成员的获取和赋值

成员是结构体的一个组成部分,一般是基本数据类型、也可以是数组、指针、结构体等。结构体的成员也可以称为属性。

结构体和数组类似,也是一组数据的集合,结构体使用点号 . 获取单个成员,可以进行赋值和取值。

1)案例1:结构体成员逐个赋值

#include <stdio.h>

 

int main()

{
   

  // 声明结构体

  struct Student

  {
   int id;      // 学号in
  • 42
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路x飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值