0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言-枚举、共用体

DS小龙哥-嵌入式技术 来源: DS小龙哥-嵌入式技术 作者: DS小龙哥-嵌入式技 2022-09-09 11:31 次阅读

1. 共用体

前面章节学习了结构体,结构体里可以按顺序存放相同或者不同的数据类型,每个成员都有它对应的存储空间。
而共用体和结构体一样也可以按顺序存放相同或者不同数据类型,但是与结构体的区别是,共用体所有成员共用一个存储空间,存储空间由成员中存储空间最大的来决定。

定义共用体的关键字: union

下面通过结构体、共同体两个定义代码对比区别。

结构体定义示例:

struct app
{
    int a;
    char b;
};

结构体:每个成员是占用独立的空间,结构体成员之间会因为内存对齐产生间隙。

共用体定义示例:

union app
{
    int a;
    int b;
    char c;
};

**共用体:**也称为联合体,采用内存覆盖技术,每个成员共用一个内存空间,开空间是以最大的成员开空间。 在单片机嵌入式设备里使用较多。共用体的语法和使用方法(定义、成员变量的访问形式等等)与结构体一样。

共同体案例代码:

#include 
#include 

union app
{
    int a;
    int b;
    char c;
};

//匿名方式定义,只能在定义共用体的时候就定义变量
union
{
    int a;
    int b;
    char c;
}a1,a2,a3;  //定义3个变量

union app2
{
    int a;
    int b;
    char c;
}b1,b2;

typedef union app3
{
    int a;
    int b;
    char c;
}c1;  //c1是新的数据类型--union app3的别名

int main()
{
    b1.a=65;
    b1.b=66;
    printf("%d\n",b1.a); //66
    printf("%d\n",b1.b); //66
    printf("%c\n",b1.c); //66 
    return 0;
}

2. 枚举

C语言的枚举可以给一串有序的数字集合定义名字,特别是数量较多的整数需要定义名字时,比#define更加方便。特别是定义函数的返回值类型,特别方便,项目开发中,一般标准的函数返回值都有很多种情况,为了方便调用者判断错误类型,可以把这些错误值全部使用枚举定义,这样调用者就能清楚知道每个数值代表的含义。

枚举的定义语法:

enum枚举名{枚举元素1,枚举元素2,……};

默认成员都是从0开始,如果某一个成员被赋了值,则该成员以后的元素都以此为基础递增。

枚举的定义及用法示例:

#include 
#include 

#define DEF_VAL 100

//枚举类型
/*
枚举内部的是常量标识符,这些常量标识符就相当于全局变量(声明放在函数之外)
枚举常量只能整型。
默认情况下枚举值是从0开始的,依次递增。
*/
enum app
{
   a1='A',a2,a3,a4
};

typedef enum app2
{
   b1='A',b2,b3,b4
}type_app2;

//枚举在程序开发中最常用的地方是:表示函数执行的状态值。

int main()
{
    printf("%d\n",a1);
    printf("%d\n",a2);
    printf("%d\n",a3);
    printf("%d\n",a4);
    return 0;
}

type_app2 func1()
{
    
    return b2;
}

enum app2 func2()
{
    return b3;
}

枚举应用案例2:

#include 
#include 

//枚举类型
/*
枚举内部的是常量标识符,这些常量标识符就相当于全局变量(声明放在函数之外)
枚举常量只能整型。
默认情况下枚举值是从0开始的,依次递增。
*/
enum app
{
   a1=0,   //表示OK
   a2,   //第一次空间申请失败
   a3,   //表示第二次空间申请失败
   a4,
   a5,
   a6
};

//枚举在程序开发中最常用的地方是:表示函数执行的状态值。
enum app func();
int main()
{
    printf("%d\n",func());
    return 0;
}

enum app func()
{
    int *p1=NULL;
    int *p2=NULL;
    p1=malloc(4);
    if(p1==NULL)
    {
        return a2; //1
    }

    p2=malloc(4);
    if(p2==NULL)
    {
        return a3;//2
    }
    return a1; //0
}

审核编辑 黄昊宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19108

    浏览量

    304836
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136706
收藏 人收藏

    评论

    相关推荐

    C语言枚举精讲分析

         在使用带有数字性质的名称时有的时候需要用到枚举的方式进行定义函数名字,按照对应的数字格式来对应相应的名称。枚举成员的值是常量不是变量。      我们首先讲解一下枚举与结构
    的头像 发表于 03-02 10:58 3931次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中<b class='flag-5'>枚举</b>精讲分析

    C语言枚举的基本概念和常见用法

    C语言中,枚举是一种方便组织和表示一组相关常量的工具。枚举类型有助于提高代码的可读性和可维护性。本文将介绍C
    发表于 08-17 15:32 1448次阅读

    C语言必备知识共用

    共用是一种 构造数据类型 ,有时候也称之为联合体。它的用途:使几个不同类型的变量共占一段内存。
    的头像 发表于 11-29 16:04 1025次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>必备知识<b class='flag-5'>共用</b><b class='flag-5'>体</b>

    C语言必备知识枚举

    枚举类型是ANSI C新标准所增加的。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
    的头像 发表于 11-29 16:07 755次阅读

    什么是C语言共用

    ;volatile unsigned char G: 1;volatile unsigned char DP: 1; } B; volatile unsigned char W;} ;这是个什么共用?怎么称呼的?这是共用
    发表于 10-25 02:32

    结构共用的区别

    转载重点:共用的所有成员占用同一段内存,修改一个成员会影响其余所有成员。图形分析影响过程通过前面的讲解,我们知道结构(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在
    发表于 07-20 06:57

    C语言的结构共用在单片机中的妙用是什么

    【分享】C语言的结构共用在单片机中的妙用C语言
    发表于 11-30 06:13

    怎样去使用C语言的结构共用

    C语言的结构共用分别有何特点呢?怎样去使用C语言
    发表于 01-17 07:51

    C语言程序设计教程之结构共用的详细资料说明

    本文档详细介绍的是C语言程序设计教程之结构共用的详细资料说明主要内容包括了:1 结构,2
    发表于 03-01 17:20 11次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>程序设计教程之结构<b class='flag-5'>体</b>与<b class='flag-5'>共用</b><b class='flag-5'>体</b>的详细资料说明

    go语言枚举类型怎么用

    go 语言枚举类型是这么用的?在什么场景下会用到枚举?本文对 go 语言枚举做了详细讲解。 枚举
    的头像 发表于 09-02 09:43 5176次阅读

    C语言的结构共用在单片机中的妙用

    【分享】C语言的结构共用在单片机中的妙用C语言
    发表于 11-20 19:36 20次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>的结构<b class='flag-5'>体</b>和<b class='flag-5'>共用</b><b class='flag-5'>体</b>在单片机中的妙用

    什么是C语言共用类型

    结构变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。而共用变量所占的内存长度等于最长的成员的长度。
    的头像 发表于 03-24 15:13 768次阅读

    C语言枚举简述

    C语言中,如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓“枚举”就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
    的头像 发表于 03-24 15:15 789次阅读

    详解C/C++结构、联合体和枚举的区别与内存对齐

    C语言中构造类型一共有4种,它们分别是数组、结构(struct)、共用(union)、枚举
    的头像 发表于 06-08 14:38 4558次阅读
    详解<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++结构<b class='flag-5'>体</b>、联合体和<b class='flag-5'>枚举</b>的区别与内存对齐

    枚举有多大?c语言枚举end的作用是什么?

    枚举有多大?c语言枚举end的作用是什么? 枚举C语言
    的头像 发表于 01-19 14:19 593次阅读