C語(yǔ)言數(shù)據(jù)類(lèi)型枚舉enum全面詳解示例教程
一、枚舉類(lèi)型的定義
enum Day//enum Day是一種類(lèi)型 { Mon,//周一到周日這些叫枚舉的可能取值,也叫枚舉常量 Tue, Wed, Thur, Fri, Sat, Sun, };
上述代碼定義的enum Day是一種枚舉類(lèi)型,{}中內(nèi)容是枚舉類(lèi)型的可能取值,也可叫作枚舉常量。
這些枚舉常量都是有值的,默認(rèn)從0開(kāi)始,依次往后遞增1,如果你愿意賦值也是可以的。
代碼如下:
#include<stdio.h> enum Color//enum Color是一種類(lèi)型 { red, green, blue }; int main() { printf("%d\n", red); printf("%d\n", green); printf("%d\n", blue); }
不賦初值打印0, 1,2
#include<stdio.h> enum Color//enum Color是一種類(lèi)型 { red=2, green, blue=6 }; int main() { printf("%d\n", red); printf("%d\n", green); printf("%d\n", blue); }
賦初值后打印初值內(nèi)容,如果你有一個(gè)沒(méi)有賦值,會(huì)緊接上一個(gè)賦值內(nèi)容+1
這里green并沒(méi)有賦值,但我們知道red是2,按照枚舉規(guī)則,green會(huì)在red的基礎(chǔ)上加1變成3,注意,blue是有賦值的,所以blue不需要在green的基礎(chǔ)上加1,blue就是6
注意:因?yàn)槭敲杜e{}內(nèi)的叫作枚舉常量,常量是不能改的,比如你在main函數(shù)里進(jìn)行賦值操作,red=9;這個(gè)鐵鐵的會(huì)報(bào)錯(cuò),一定要區(qū)分枚舉初始化和賦值的區(qū)別。
二、枚舉類(lèi)型的使用
2.1創(chuàng)建變量
我們前面說(shuō)過(guò),enum Day、enum Color這種叫作枚舉類(lèi)型,既然它是類(lèi)型,它就可以創(chuàng)建變量,
代碼如下:
#include<stdio.h> enum Color//enum Color是一種類(lèi)型 { red, green, blue }; int main() { enum Color a = 1; enum Color b = green; }
我們用枚舉類(lèi)型創(chuàng)建了變量a和b,這里需要注意的是,把1賦給a,在c語(yǔ)言環(huán)境下編譯器不會(huì)報(bào)錯(cuò),但c++下就會(huì)出現(xiàn)問(wèn)題,編譯器會(huì)認(rèn)為1是一個(gè)整形,你賦給一個(gè)枚舉類(lèi)型顯然是有問(wèn)題的。所以我們這里最好把枚舉可能取值賦給枚舉變量。
2.2一些優(yōu)點(diǎn)
到這里大家可能會(huì)有一些疑惑,我們可以用#define來(lái)定義常量,為什么要用枚舉呢?我們來(lái)看一下它們的區(qū)別:
代碼如下(示例):
#define red 2 #define green 4 #define blue 8 enum Color { Red, Green, Blue };
首先由2.1知,c++環(huán)境下,枚舉類(lèi)型會(huì)對(duì)其他類(lèi)型的賦值進(jìn)行警告,而#define定義的常量是沒(méi)有類(lèi)型的;
第二就是防止命名污染,舉個(gè)栗子:#define red 2,這是全局范圍命名red為2,那假如你其他地方用到2這個(gè)數(shù)字,到時(shí)候到底是2本身還是red的意思?而枚舉定義的red是枚舉類(lèi)型的一個(gè)可能取值,不會(huì)影響到其他數(shù)據(jù);
第三,枚舉是可以調(diào)試的,調(diào)試的過(guò)程中你大可輸入枚舉類(lèi)型創(chuàng)建的變量,但是#define red 2這種,red如果在代碼中會(huì)被自動(dòng)替換為2,你無(wú)法用red進(jìn)行監(jiān)視
第四,就是可以一次定義多個(gè)枚舉常量
總結(jié)
今天我們學(xué)完了枚舉的相關(guān)定義,枚舉類(lèi)型的使用以及枚舉相對(duì)于#define定義的區(qū)別,下一期筆者還會(huì)繼續(xù)更新C語(yǔ)言聯(lián)合(共用體相關(guān)知識(shí)),期待你的關(guān)注,預(yù)祝讀者學(xué)習(xí)愉快!更多關(guān)于C語(yǔ)言enum枚舉數(shù)據(jù)類(lèi)型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++11 <future>中std::promise 介紹
這篇文章主要介紹了C++11 <future>中std::promise 介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02簡(jiǎn)單聊聊C++中回調(diào)函數(shù)的實(shí)現(xiàn)
回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++中回調(diào)函數(shù)實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-01-01C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07一文帶你學(xué)會(huì)C語(yǔ)言中的qsort函數(shù)
qsort函數(shù)是C語(yǔ)言的庫(kù)函數(shù),能實(shí)現(xiàn)對(duì)各種元素類(lèi)型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實(shí)現(xiàn)原理,只對(duì)使用方法進(jìn)行說(shuō)明,希望對(duì)大家有所幫助2022-12-12C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼
這篇文章主要介紹了C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04