<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          C語(yǔ)言 您所在的位置:網(wǎng)站首頁(yè) 屬蛇男性格脾氣怎樣 C語(yǔ)言

          C語(yǔ)言

          2023-10-17 22:26| 來(lái)源: 網(wǎng)絡(luò)整理| 查看: 265

          原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/

          有改動(dòng)

          C語(yǔ)言詳解 - 枚舉類(lèi)型

          注:以下全部代碼的執(zhí)行環(huán)境為VC++ 6.0

          在程序中,可能需要為某些整數(shù)定義一個(gè)別名,我們可以利用預(yù)處理指令#define來(lái)完成這項(xiàng)工作,您的代碼可能是:

          #define MON 1

          #define TUE 2

          #define WED 3

          #define THU 4

          #define FRI 5

          #define SAT 6

          #define SUN 7

          在此,我們定義一種新的數(shù)據(jù)類(lèi)型,希望它能完成同樣的工作。這種新的數(shù)據(jù)類(lèi)型叫枚舉型。

          1. 定義一種新的數(shù)據(jù)類(lèi)型 - 枚舉型

          以下代碼定義了這種新的數(shù)據(jù)類(lèi)型 - 枚舉型

          enum DAY

          {

          ????MON=1, TUE, WED, THU, FRI, SAT, SUN

          };

          (1) 枚舉型是一個(gè)集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號(hào),隔開(kāi)。

          (2) DAY是一個(gè)標(biāo)識(shí)符,可以看成這個(gè)集合的名字,是一個(gè)可選項(xiàng),即是可有可無(wú)的項(xiàng)。

          (3) 第一個(gè)枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1。

          (4) 可以人為設(shè)定枚舉成員的值,從而自定義某個(gè)范圍內(nèi)的整數(shù)。

          (5) 枚舉型是預(yù)處理指令#define的替代。

          (6) 類(lèi)型定義以分號(hào);結(jié)束。

          C語(yǔ)言深度解剖:

          一般的定義方式如下:enum enum_type_name{???ENUM_CONST_1,???ENUM_CONST_2,???...???ENUM_CONST_n} enum_variable_name;

          注意:enum_type_name 是自定義的一種數(shù)據(jù)數(shù)據(jù)類(lèi)型名,而enum_variable_name 為enum_type_name類(lèi)型的一個(gè)變量,也就是我們平時(shí)常說(shuō)的枚舉變量。實(shí)際上enum_type_name類(lèi)型是對(duì)一個(gè)變量取值范圍的限定,而花括號(hào)內(nèi)是它的取值范圍,即enum_type_name 類(lèi)型的變量enum_variable_name 只能取值為花括號(hào)內(nèi)的任何一個(gè)值,如果賦給該類(lèi)型變量的值不在列表中,則會(huì)報(bào)錯(cuò)或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,這些成員都是常量,也就是我們平時(shí)所說(shuō)的枚舉常量(常量一般用大寫(xiě))。

          ?

          2. 使用枚舉類(lèi)型對(duì)變量進(jìn)行聲明

          新的數(shù)據(jù)類(lèi)型定義完成后,它就可以使用了。我們已經(jīng)見(jiàn)過(guò)最基本的數(shù)據(jù)類(lèi)型,如:整型int, 單精度浮點(diǎn)型float, 雙精度浮點(diǎn)型double, 字符型char, 短整型short等等。用這些基本數(shù)據(jù)類(lèi)型聲明變量通常是這樣:

          char a; //變量a的類(lèi)型均為字符型char

          char letter;

          int x,?y,?z; //變量x,y和z的類(lèi)型均為整型int

          int number;

          double m, n;

          double result; //變量result的類(lèi)型為雙精度浮點(diǎn)型double

          既然枚舉也是一種數(shù)據(jù)類(lèi)型,那么它和基本數(shù)據(jù)類(lèi)型一樣也可以對(duì)變量進(jìn)行聲明。

          方法一:枚舉類(lèi)型的定義和變量的聲明分開(kāi)

          enum DAY

          {

          ????MON=1, TUE, WED, THU, FRI, SAT, SUN

          };

          enum DAY yesterday;

          enum DAY today;

          enum DAY tomorrow; //變量tomorrow的類(lèi)型為枚舉型enum DAY

          enum DAY good_day, bad_day; //變量good_day和bad_day的類(lèi)型均為枚舉型enum DAY

          方法二:類(lèi)型定義與變量聲明同時(shí)進(jìn)行:

          enum //跟第一個(gè)定義不同的是,此處的標(biāo)號(hào)DAY省略,這是允許的。這種方式相當(dāng)于定義了

          { ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????一個(gè)枚舉變量,參考

          ????saturday, ?????????????????????????????????????????????????????????????????????????????????????????????????????????上面?C語(yǔ)言深度解剖 定義

          ????sunday = 0,

          ????monday,

          ????tuesday,

          ????wednesday,

          ????thursday,

          ????friday

          } workday; //變量workday的類(lèi)型為枚舉型enum DAY

          workday=friday;

          sizeof(workday)=4;

          enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //變量days的類(lèi)型為枚舉型enum week

          enum BOOLEAN { false, true } end_flag, match_flag; //定義枚舉類(lèi)型并聲明了兩個(gè)枚舉型變量

          方法三:用typedef關(guān)鍵字將枚舉類(lèi)型定義成別名,并利用該別名進(jìn)行變量聲明:

          typedef enum?workday ?//此處的workday可以省略,或者改成其他,不會(huì)影響后面

          {

          ????saturday,

          ????sunday = 0,

          ????monday,

          ????tuesday,

          ????wednesday,

          ????thursday,

          ????friday

          }?workday;?//此處的workday為枚舉型enum workday的別名,類(lèi)似于int

          workday?today, tomorrow; //此處的workday顏色對(duì)應(yīng),變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday

          enum workday中的workday可以省略:

          typedef enum

          {

          ????saturday,

          ????sunday = 0,

          ????monday,

          ????tuesday,

          ????wednesday,

          ????thursday,

          ????friday

          } workday; //此處的workday為枚舉型enum workday的別名

          workday today, tomorrow; //變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday

          也可以用這種方式:

          typedef enum workday???//VC6.0和MDK編譯均未通過(guò)

          {

          ????saturday,

          ????sunday = 0,

          ????monday,

          ????tuesday,

          ????wednesday,

          ????thursday,

          ????friday

          };

          workday today, tomorrow; //變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday

          注意:同一個(gè)程序中不能定義同名的枚舉類(lèi)型,不同的枚舉類(lèi)型中也不能存在同名的命名常量。錯(cuò)誤示例如下所示:

          錯(cuò)誤聲明一:存在同名的枚舉類(lèi)型

          typedef enum

          {

          wednesday,

          thursday,

          friday

          }?workday;

          typedef enum WEEK

          {

          saturday,

          sunday = 0,

          monday,

          }?workday;

          錯(cuò)誤聲明二:存在同名的枚舉成員

          typedef enum

          {

          wednesday,

          thursday,

          friday

          } workday_1;

          typedef enum WEEK

          {

          wednesday,

          sunday = 0,

          monday,

          } workday_2;

          3. 使用枚舉類(lèi)型的變量

          3.1 對(duì)枚舉型的變量賦值。

          實(shí)例將枚舉類(lèi)型的賦值與基本數(shù)據(jù)類(lèi)型的賦值進(jìn)行了對(duì)比:

          方法一:先聲明變量,再對(duì)變量賦值

          #include

          ?

          enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

          void main()

          {

          ?

          int x, y, z;

          x = 10;

          y = 20;

          z = 30;

          ?

          enum DAY yesterday, today, tomorrow;

          yesterday = MON;

          today = TUE;

          tomorrow = WED;

          printf("%d %d %d \n", yesterday, today, tomorrow);

          }

          方法二:聲明變量的同時(shí)賦初值

          #include

          ?

          enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

          void main()

          {

          ?

          int x=10, y=20, z=30;

          ?

          enum DAY yesterday = MON,?today = TUE,?tomorrow = WED;

          printf("%d %d %d \n", yesterday, today, tomorrow);

          }

          方法三:定義類(lèi)型的同時(shí)聲明變量,然后對(duì)變量賦值。

          #include

          ?

          enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;

          ?

          int x, y, z;

          void main()

          {

          ?

          x = 10; y = 20; z = 30;

          ?

          yesterday = MON;

          today = TUE;

          tomorrow = WED;

          printf("%d %d %d \n", x, y, z); //輸出:10 20 30

          printf("%d %d %d \n", yesterday, today, tomorrow); //輸出:1 2 3

          }

          方法四:類(lèi)型定義,變量聲明,賦初值同時(shí)進(jìn)行。

          #include

          ?

          enum DAY

          {

          MON=1,

          TUE,

          WED,

          THU,

          FRI,

          SAT,

          SUN

          }

          yesterday = MON, today = TUE, tomorrow = WED;

          ?

          int x = 10, y = 20, z = 30;

          void main()

          {

          ????printf("%d %d %d \n", x, y, z); //輸出:10 20 30

          ????printf("%d %d %d \n", yesterday, today, tomorrow); //輸出:1 2 3

          }

          3.2 對(duì)枚舉型的變量賦整數(shù)值時(shí),需要進(jìn)行類(lèi)型轉(zhuǎn)換。

          #include

          enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

          void main()

          {

          ????enum DAY yesterday, today, tomorrow;

          ????yesterday = TUE;

          ????today = (enum DAY) (yesterday + 1); //類(lèi)型轉(zhuǎn)換

          ????tomorrow = (enum DAY) 30; //類(lèi)型轉(zhuǎn)換

          ????//tomorrow = 3; //錯(cuò)誤

          ????printf("%d %d %d \n", yesterday, today, tomorrow); //輸出:2 3 30

          }

          ?

          問(wèn)題:

          enum Color { GREEN = 1, RED, BLUE, GREEN_RED = 10, GREEN_BLUE }ColorVal;

          ?

          1.枚舉能做到事,#define宏能不能都做到?如果能,那為什么還需要枚舉? 2.求sizeof(ColorVal) 枚舉可以自增1,這樣不用每一個(gè)值都定義,而宏必須每個(gè)值都定義。而且枚舉是一個(gè)集合,代表一類(lèi)值,像你代碼中的顏色歸為一類(lèi),方便使用,而宏不能形成集合。 sizeof(ColorVal)是4,因?yàn)镃olorVal是一個(gè)枚舉變量,而枚舉變量代表一個(gè)整數(shù)(如ColorVal = RED),而整數(shù)是4個(gè)字節(jié)。


          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專(zhuān)題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 林州市| 宣城市| 凤冈县| 根河市| 扎赉特旗| 塔河县| 云安县| 雷山县| 丹棱县| 麻城市| 简阳市| 洛川县| 水富县| 光泽县| 比如县| 阿坝县| 丰宁| 梅州市| 思茅市| 开化县| 应城市| 梅河口市| 大宁县| 白朗县| 阜宁县| 临洮县| 浦江县| 彝良县| 偏关县| 惠州市| 同仁县| 泰来县| 德化县| 鸡西市| 昂仁县| 噶尔县| 洛宁县| 宝应县| 咸阳市| 永和县| 泗水县| http://444 http://444 http://444 http://444 http://444 http://444