0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言-枚舉、共用體

DS小龍哥-嵌入式技術(shù) ? 來源: DS小龍哥-嵌入式技術(shù) ? 作者: DS小龍哥-嵌入式技 ? 2022-09-09 11:31 ? 次閱讀

1. 共用體

前面章節(jié)學(xué)習(xí)了結(jié)構(gòu)體,結(jié)構(gòu)體里可以按順序存放相同或者不同的數(shù)據(jù)類型,每個(gè)成員都有它對(duì)應(yīng)的存儲(chǔ)空間。
而共用體和結(jié)構(gòu)體一樣也可以按順序存放相同或者不同數(shù)據(jù)類型,但是與結(jié)構(gòu)體的區(qū)別是,共用體所有成員共用一個(gè)存儲(chǔ)空間,存儲(chǔ)空間由成員中存儲(chǔ)空間最大的來決定。

定義共用體的關(guān)鍵字: union

下面通過結(jié)構(gòu)體、共同體兩個(gè)定義代碼對(duì)比區(qū)別。

結(jié)構(gòu)體定義示例:

struct app
{
    int a;
    char b;
};

結(jié)構(gòu)體:每個(gè)成員是占用獨(dú)立的空間,結(jié)構(gòu)體成員之間會(huì)因?yàn)閮?nèi)存對(duì)齊產(chǎn)生間隙。

共用體定義示例:

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

**共用體:**也稱為聯(lián)合體,采用內(nèi)存覆蓋技術(shù),每個(gè)成員共用一個(gè)內(nèi)存空間,開空間是以最大的成員開空間。 在單片機(jī)、嵌入式設(shè)備里使用較多。共用體的語法和使用方法(定義、成員變量的訪問形式等等)與結(jié)構(gòu)體一樣。

共同體案例代碼:

#include 
#include 

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

//匿名方式定義,只能在定義共用體的時(shí)候就定義變量
union
{
    int a;
    int b;
    char c;
}a1,a2,a3;  //定義3個(gè)變量

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

typedef union app3
{
    int a;
    int b;
    char c;
}c1;  //c1是新的數(shù)據(jù)類型--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語言的枚舉可以給一串有序的數(shù)字集合定義名字,特別是數(shù)量較多的整數(shù)需要定義名字時(shí),比#define更加方便。特別是定義函數(shù)的返回值類型,特別方便,項(xiàng)目開發(fā)中,一般標(biāo)準(zhǔn)的函數(shù)返回值都有很多種情況,為了方便調(diào)用者判斷錯(cuò)誤類型,可以把這些錯(cuò)誤值全部使用枚舉定義,這樣調(diào)用者就能清楚知道每個(gè)數(shù)值代表的含義。

枚舉的定義語法:

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

默認(rèn)成員都是從0開始,如果某一個(gè)成員被賦了值,則該成員以后的元素都以此為基礎(chǔ)遞增。

枚舉的定義及用法示例:

#include 
#include 

#define DEF_VAL 100

//枚舉類型
/*
枚舉內(nèi)部的是常量標(biāo)識(shí)符,這些常量標(biāo)識(shí)符就相當(dāng)于全局變量(聲明放在函數(shù)之外)
枚舉常量只能整型。
默認(rèn)情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
   a1='A',a2,a3,a4
};

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

//枚舉在程序開發(fā)中最常用的地方是:表示函數(shù)執(zhí)行的狀態(tài)值。

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;
}

枚舉應(yīng)用案例2:

#include 
#include 

//枚舉類型
/*
枚舉內(nèi)部的是常量標(biāo)識(shí)符,這些常量標(biāo)識(shí)符就相當(dāng)于全局變量(聲明放在函數(shù)之外)
枚舉常量只能整型。
默認(rèn)情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
   a1=0,   //表示OK
   a2,   //第一次空間申請(qǐng)失敗
   a3,   //表示第二次空間申請(qǐng)失敗
   a4,
   a5,
   a6
};

//枚舉在程序開發(fā)中最常用的地方是:表示函數(shù)執(zhí)行的狀態(tài)值。
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
}

審核編輯 黃昊宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18836

    瀏覽量

    298881
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134358
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言枚舉精講分析

    ? ? ?在使用帶有數(shù)字性質(zhì)的名稱時(shí)有的時(shí)候需要用到枚舉的方式進(jìn)行定義函數(shù)名字,按照對(duì)應(yīng)的數(shù)字格式來對(duì)應(yīng)相應(yīng)的名稱。枚舉成員的值是常量不是變量。 ? ? ?我們首先講解一下枚舉與結(jié)構(gòu)
    的頭像 發(fā)表于 03-02 10:58 ?3836次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中<b class='flag-5'>枚舉</b>精講分析

    C語言枚舉的基本概念和常見用法

    C語言中,枚舉是一種方便組織和表示一組相關(guān)常量的工具。枚舉類型有助于提高代碼的可讀性和可維護(hù)性。本文將介紹C
    發(fā)表于 08-17 15:32 ?1270次閱讀

    C語言必備知識(shí)共用

    共用是一種 構(gòu)造數(shù)據(jù)類型 ,有時(shí)候也稱之為聯(lián)合體。它的用途:使幾個(gè)不同類型的變量共占一段內(nèi)存。
    的頭像 發(fā)表于 11-29 16:04 ?885次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>必備知識(shí)<b class='flag-5'>共用</b><b class='flag-5'>體</b>

    C語言必備知識(shí)枚舉

    枚舉類型是ANSI C新標(biāo)準(zhǔn)所增加的。如果一個(gè)變量只有幾種可能的值,可以定義為枚舉類型。所謂“枚舉是指將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。
    的頭像 發(fā)表于 11-29 16:07 ?680次閱讀

    什么是C語言共用?

    ;volatile unsigned char G: 1;volatile unsigned char DP: 1; } B; volatile unsigned char W;} ;這是個(gè)什么共用?怎么稱呼的?這是共用
    發(fā)表于 10-25 02:32

    結(jié)構(gòu)共用的區(qū)別

    轉(zhuǎn)載重點(diǎn):共用的所有成員占用同一段內(nèi)存,修改一個(gè)成員會(huì)影響其余所有成員。圖形分析影響過程通過前面的講解,我們知道結(jié)構(gòu)(Struct)是一種構(gòu)造類型或復(fù)雜類型,它可以包含多個(gè)類型不同的成員。在
    發(fā)表于 07-20 06:57

    C語言的結(jié)構(gòu)共用在單片機(jī)中的妙用是什么

    【分享】C語言的結(jié)構(gòu)共用在單片機(jī)中的妙用C語言
    發(fā)表于 11-30 06:13

    怎樣去使用C語言的結(jié)構(gòu)共用

    C語言的結(jié)構(gòu)共用分別有何特點(diǎn)呢?怎樣去使用C語言
    發(fā)表于 01-17 07:51

    C語言程序設(shè)計(jì)教程之結(jié)構(gòu)共用的詳細(xì)資料說明

    本文檔詳細(xì)介紹的是C語言程序設(shè)計(jì)教程之結(jié)構(gòu)共用的詳細(xì)資料說明主要內(nèi)容包括了:1 結(jié)構(gòu),2
    發(fā)表于 03-01 17:20 ?11次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設(shè)計(jì)教程之結(jié)構(gòu)<b class='flag-5'>體</b>與<b class='flag-5'>共用</b><b class='flag-5'>體</b>的詳細(xì)資料說明

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會(huì)用到枚舉?本文對(duì) go 語言枚舉做了詳細(xì)講解。 枚舉
    的頭像 發(fā)表于 09-02 09:43 ?5080次閱讀

    C語言的結(jié)構(gòu)共用在單片機(jī)中的妙用

    【分享】C語言的結(jié)構(gòu)共用在單片機(jī)中的妙用C語言
    發(fā)表于 11-20 19:36 ?20次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的結(jié)構(gòu)<b class='flag-5'>體</b>和<b class='flag-5'>共用</b><b class='flag-5'>體</b>在單片機(jī)中的妙用

    什么是C語言共用類型

    結(jié)構(gòu)變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。而共用變量所占的內(nèi)存長度等于最長的成員的長度。
    的頭像 發(fā)表于 03-24 15:13 ?669次閱讀

    C語言枚舉簡述

    C語言中,如果一個(gè)變量只有幾種可能的值,則可以定義為枚舉類型,所謂“枚舉”就是指把可能的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。
    的頭像 發(fā)表于 03-24 15:15 ?695次閱讀

    詳解C/C++結(jié)構(gòu)、聯(lián)合體和枚舉的區(qū)別與內(nèi)存對(duì)齊

    C語言中構(gòu)造類型一共有4種,它們分別是數(shù)組、結(jié)構(gòu)(struct)、共用(union)、枚舉
    的頭像 發(fā)表于 06-08 14:38 ?3722次閱讀
    詳解<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++結(jié)構(gòu)<b class='flag-5'>體</b>、聯(lián)合體和<b class='flag-5'>枚舉</b>的區(qū)別與內(nèi)存對(duì)齊

    枚舉有多大?c語言枚舉end的作用是什么?

    枚舉有多大?c語言枚舉end的作用是什么? 枚舉C語言
    的頭像 發(fā)表于 01-19 14:19 ?458次閱讀