c语言分层理解(枚举和联合体)

简介: 1. 枚举1.1 枚举定义枚举的意思就是列举。列举的是可能取值。

1. 枚举

1.1 枚举定义

枚举的意思就是列举。列举的是可能取值。

比如:

enum color
{
  red,
  bule,
  green,
  black,
  white
};

其结构和结构体相似:

bfa42c5f057fb8752467a006a2d31678.png

1.2 枚举常量的理解

1af03fcd18acf047a4f134e6ec4e60ef.png

特点:

默认的第一个常量是0,后面一次递增。赋值操作只能在枚举类型中赋值,可以理解为创建的时候给一个对应的值,但是为什么在主函数或者其他地方不能赋值呢?可以这么理解,在创建这个枚举的时候常量对应的有相应的数字,这里更改默认,使其改变,达到我们想要的目的,但是别处不能更改是因为这里我们已经定义好了我们想要的东西,它是个常量,常量是不能被修改的,但是你会回头问为什么开始可以去改变呢?因为我们需要达到某种目的,你也可以理解是语法固定。

1.3 枚举的优点

我们可以#define去定义常量为什么还需要枚举呢?

优点:

1.增强代码可读性和维护性

2.#define定义的标识符是没有类型的就是一个常量,枚举定义的常量是有类型的

3.防止命名污染

4.便于调试

5.使用方便,一次可以定义多个常量

枚举注意要点(枚举变量是有类型的):

2450a6c0494871108f7b809954f866d3.png

1.4 枚举大小

enum color
{
  red,
  bule,
  green,
  black,
  white
};
int main()
{
  printf("%d\n", sizeof(enum color));
  return 0;
}
//结果是4

解释:因为我们枚举列举的是可能要使用的值,而在我们使用时候只会拿到一个,又因为{}内是常量所以就是4个字节的大小。

1.5 枚举变量的使用

enum operation
{
  Exit,
  Add,
  Delete,
  Choose
};
int main()
{
  int input = 0;
  scanf("%d", &input);
  switch (input)
  {
  case Add:
    //实现操作
  case Delete:
    //实现操作
  case Choose:
    //实现操作
  case Exit:
    //实现操作
  }
}

好处就是通过名可以知道要实现什么操作。

2.联合体(共同体)

2.1 联合体定义

联合体顾名思义就是公用一块空间。

形式(和结构体形式一样):

union Un
{
  int a;
  char c;
  float f;
};

1.2 联合体特点

看图得知:

f9cd6ce571ff0fd45a3641f712a93d43.png


共用同一个空间的起始地址。

1.2.1 联合体实现判断大小端

方法一:

int check_sys()
{
  //1=0x01000000;
  int num = 1;
  return *(char*)#
}
int main()
{
  int ret = check_sys();
  if (ret == 1)
    printf("小端\n");
  else
    printf("大端\n");
  return 0;
}

方法二(使用联合体求解):

int check_sys()
{
  union Un
  {
    char c;
    int i;
  }u;
  u.i = 1;
  return u.c;
}
int main()
{
  int ret = check_sys();
  if (ret == 1)
    printf("小端\n");
  else
    printf("大端\n");
  return 0;
}

1.3 联合体的大小

联合的大小至少是最大成员的大小

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

1.3.1 实例一

5b4bf10e82b4d8addbf473b9b542b623.png

1.3.2 实例二

07a3c98cff4d3bb44e140d191525a278.png









相关文章
|
12天前
|
C语言
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
本文档介绍了编程任务的详细内容,旨在运用枚举法求解硬币等额 - 循环控制语句(`for`、`while`)及跳转语句(`break`、`continue`)的使用。 - 循环嵌套语句的基本概念和应用,如双重`for`循环、`while`嵌套等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台将对编写的代码进行测试,并给出预期输出结果。 5. **通关代码**:提供完整的代码示例,帮助理解并完成任务。 6. **测试结果**:展示代码运行后的实际输出,验证正确性。 文档结构清晰,逐步引导读者掌握循环结构与嵌套的应用,最终实现硬币兑换的程序设计。
44 19
|
12天前
|
C语言
【C语言程序设计——枚举】得到 3 种不同颜色的球的可能取法(头歌实践教学平台习题)【合集】
本关任务要求从红、黄、蓝、白、黑五种颜色的球中,每次取出3个不同颜色的球,列举所有可能的排列情况。通过定义枚举类型和使用嵌套循环语句实现。枚举类型用于表示球的颜色,循环语句用于生成并输出所有符合条件的排列 编程要求:在指定区域内补充代码,确保输出格式正确且完整。测试说明:平台将验证代码输出是否与预期一致,包括每种排列的具体顺序和总数。 示例输出: ``` Output: 1 red yellow blue 2 red yellow white ... 60 black white blue total: 60 ```
32 4
|
3月前
|
存储 编译器 C语言
c语言回顾-联合和枚举
c语言回顾-联合和枚举
43 4
|
3月前
|
存储 C语言 C++
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
|
3月前
|
存储 编译器 Linux
深入理解 C 语言中的联合体
深入理解 C 语言中的联合体
|
3月前
|
存储 安全 编译器
深入理解C语言中的枚举
深入理解C语言中的枚举
|
3月前
|
存储 编译器 C语言
【C语言】自定义类型:联合与枚举的简明概述
【C语言】自定义类型:联合与枚举的简明概述
|
5月前
|
存储 编译器 C语言
【C语言篇】自定义类型:联合体和枚举详细介绍
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
57 1
|
7月前
|
编译器 C语言
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
|
7月前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构

热门文章

最新文章