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++程序中定义struct结构体的方法

    详解C++程序中定义struct结构体的方法

    C++中同样拥有C语言中的结构体,下面就来详解C++程序中定义struct结构体的方法,需要的朋友可以参考下
    2016-05-05
  • C++中String增删查改模拟实现方法举例

    C++中String增删查改模拟实现方法举例

    这篇文章主要给大家介绍了关于C++中String增删查改模拟实现方法的相关资料,String是C++中的重要类型,程序员在C++面试中经常会遇到关于String的细节问题,甚至要求当场实现这个类,需要的朋友可以参考下
    2023-11-11
  • C/C++高精度算法的实现

    C/C++高精度算法的实现

    这篇文章主要介绍了C/C++高精度算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++ explicit关键字的应用方法详细讲解

    C++ explicit关键字的应用方法详细讲解

    C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
    2013-09-09
  • C语言实现简易网络聊天室

    C语言实现简易网络聊天室

    这篇文章主要为大家详细介绍了C语言实现简易网络聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++归并排序算法实例

    C++归并排序算法实例

    这篇文章主要介绍了C++归并排序算法实例,本文先是介绍了什么是归并排序,然后给出了实现代码,需要的朋友可以参考下
    2014-10-10
  • C语言中枚举与联合体的使用方法(enum union)

    C语言中枚举与联合体的使用方法(enum union)

    枚举的意思就是列举,将每一个可能的取值都进行一一列举,下面这篇文章主要给大家介绍了关于C语言中枚举与联合体的使用方法,需要的朋友可以参考下
    2021-09-09
  • C++使用邮件槽实现ShellCode跨进程传输

    C++使用邮件槽实现ShellCode跨进程传输

    在计算机安全领域,进程间通信(IPC)一直是一个备受关注的话题,在本文中,我们将探讨如何使用Windows邮件槽(Mailslot)实现ShellCode的跨进程传输,需要的可以参考下
    2023-12-12
  • C++多继承同名隐藏实例详细介绍

    C++多继承同名隐藏实例详细介绍

    多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类..本文将对C++多继承同名隐藏实例进行分析
    2012-11-11
  • 利用C++11原子量如何实现自旋锁详解

    利用C++11原子量如何实现自旋锁详解

    当自旋锁尝试获取锁时以忙等待(busy waiting)的形式不断地循环检查锁是否可用,下面这篇文章主要给大家介绍了关于利用C++11原子量如何实现自旋锁的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06

最新评论