C语言中共用体和枚举的实现

 更新时间:2025年12月18日 10:27:13   作者:VekiSon  
本文主要介绍了C语言中共用体和枚举的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、共用体(联合体)

1.共用体的定义与声明

  • 共用体的定义
union 类型名
{
    数据类型 成员变量1;
    数据类型 成员变量2;
    数据类型 成员变量3;
    数据类型 成员变量4;
    ...
}
  • 共用体的声明

和结构体一样,共用体变量声明有 3 种常见形式:

// 方式1:定义后单独声明
union Data 
{
    int i;
    char c;
    float f;
};
union Data a, b;

// 方式2:定义时声明变量
union Data2 
{
    int x;
    double y;
} c, d;

// 方式3:匿名共用体(仅使用一次,无名称)
union 
{
    char ch;
    short s;
} e;

2.共用体的特征

  • 共用体每个成员变量的内存空间都是共享的
  • 共用体也会用于函数参数的传递
  • 共用体的大小,是最大成员变量的大小

3.共用体的应用

1.大小端判断

#include <stdio.h>

union DATA
{
    int a;
    char c;
};

int main()
{
    union DATA data;
    data.a = 0x12345678;
    if(0x78 == data.c)
    {
        printf("little end\n");
    }
    else
    {
        printf("big end\n");
    }
    return 0;                                                                 
}

2.作为函数的参数传递的时候的不同选项(EPOLL)

4.共用体与结构体的区别

特性共用体(Union)结构体(Struct)
内存分配所有成员共享同一块内存成员各自占用独立内存,总大小 = 各成员大小之和(含对齐)
成员访问同一时间只能有效访问一个成员可同时访问所有成员
大小计算总大小 = 最大成员的大小(含对齐)总大小 = 各成员大小之和(含对齐)
用途节省内存、类型转换组合不同类型数据,描述复杂对象

二、枚举

1.枚举的定义与声明

枚举:约定变量的取值范围。比如月份、周几。

//枚举值当常量值看,类型为整形(int)
enum 类型名 {枚举值1,枚举值2, 枚举值3,枚举值4 ,枚举值5, 枚举值6, ... };

//MON如果没有指定值,那么它的值就是0,后面枚举值就在一个的值的基础上+1
enum WEEK {MON, TUE, WED, THU, FRI, SAT, SUN};

//当然也可一给每个枚举值赋新值进去
enum WEEK {MON,TUE=3,WED=4,THU=5,FRI=6,SAT,SUN};

关键规则:

  • 枚举常量的值必须是整数(不能是浮点数、字符串)。
  • 允许不同枚举常量赋值相同(但不推荐,失去唯一性)。
  • 未显式赋值的成员,值为 “前一个成员的值 + 1”。

2.枚举的应用

  • 和 switch 搭配使用
  • 提高代码的可阅读性

代码示例:

#include <stdio.h>

enum WEEK {MON, TUE, WED, THU, FRI, SAT, SUN};

typedef enum
{
	JAN,
	FEB,
	MARCH,
	APRI,
	MAY,
	JU,
	JULY,
}MONTH;

int main()
{
	enum WEEK week;
	MONTH mon = MAY;

	int num = 0;
	printf("input num (0~6):");
	scanf("%d", &num);
	week = num;

	switch(week)
	{
		case MON:
			printf("go to school\n");
			break;
		case TUE:
			printf("go to swim\n");
			break;
		case WED:
			printf("go to read\n");
			break;
		case THU:
			printf("go to study\n");
			break;
		case FRI:
			printf("go to pao dao\n");
			break;
		case SAT:
			printf("go to da wa\n");
			break;
		case SUN:
			printf("go to sleep\n");
			break;
		default:
			printf("I don't know\n");
	}
}

到此这篇关于C语言中共用体和枚举的实现的文章就介绍到这了,更多相关C语言 共用体和枚举内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言的strcpy函数你了解吗

    C语言的strcpy函数你了解吗

    这篇文章主要为大家详细介绍了C语言的strcpy函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Qt实现界面滑动切换效果的思路详解

    Qt实现界面滑动切换效果的思路详解

    这篇文章主要介绍了Qt实现界面滑动切换效果,主要包括设计思路及主要函数讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C语言合并排序及实例代码

    C语言合并排序及实例代码

    本篇文章主要介绍C语言合并排序算法,这里对合并排序通过实例代码进行了详细讲解,希望能帮助到大家学习
    2016-07-07
  • C语言用指针函数寻找数组中的最大值与次大值

    C语言用指针函数寻找数组中的最大值与次大值

    这篇文章主要给大家介绍了关于C语言用指针函数寻找数组中的最大值与次大值的相关资料,该代码通过定义一个名为LargestTow的函数来找出数组中的最大值和次大值,并将结果分别存入指针所指向的内存单元中,需要的朋友可以参考下
    2024-11-11
  • C++实现LeetCode(60.序列排序)

    C++实现LeetCode(60.序列排序)

    这篇文章主要介绍了C++实现LeetCode(60.序列排序),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 剖析C++编程中friend关键字所修饰的友元函数和友元类

    剖析C++编程中friend关键字所修饰的友元函数和友元类

    这篇文章主要介绍了剖析C++编程中friend关键字所修饰的友元函数和友元类,友元了以后在外部就可以访问到正常情况下无法访问到的私有属性和方法,需要的朋友可以参考下
    2016-01-01
  • Qt实现自定义验证码输入框控件的方法

    Qt实现自定义验证码输入框控件的方法

    本文主要介绍了Qt实现自定义验证码输入框控件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C++实现LeetCode(137.单独的数字之二)

    C++实现LeetCode(137.单独的数字之二)

    这篇文章主要介绍了C++实现LeetCode(137.单独的数字之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++11新增的包装器详解

    C++11新增的包装器详解

    由于函数调用可以使用函数名、函数指针、函数对象或有名称的lambda表达式,可调用类型太丰富导致模板的效率极低。包装器用于解决效率低的问题
    2022-08-08
  • 使用 Visual Studio 2022 开发 Linux C++ 应用程序的过程详解

    使用 Visual Studio 2022 开发 Linux C++ 应用程序的过程详解

    Visual Studio 2022 引入了用于 Linux C++ 开发的本机 WSL2 工具集,可以构建和调试 Linux C++ 代码,并提供了非常好的 Linux 文件系统性能、GUI 支持和完整的系统调用兼容性,这篇文章主要介绍了使用Visual Studio 2022 开发 Linux C++ 应用程序,需要的朋友可以参考下
    2021-11-11

最新评论