C語(yǔ)言詳細(xì)分析講解關(guān)鍵字enum與sizeof及typedef的用法
一、枚舉類型的使用方法
- enum 是 C 語(yǔ)言中的一種自定義類型
- enum 值是可以根據(jù)需要自定義的整型值
- 第一個(gè)定義的 enum 值默認(rèn)為 0
- 默認(rèn)情況下的 enum 值是在前一個(gè)定義值的基礎(chǔ)上加 1
- enum 類型的變量只能取定義時(shí)的離散值
- enum 中定義的值是C語(yǔ)言中真正意義上的常量
- 在工程中 enum 多用于定義整型常量
下面看一段 enum 的使用代碼吧:
#include<stdio.h> enum { ARRAY_SIZE = 10 }; enum Color { RED = 0x00FF0000, GREEN = 0x0000FF00, BLUE = 0x000000FF }; void PrintColor(enum Color c) { switch (c) { case RED: printf("Color: RED (0x%08x)\n", c); break; case GREEN: printf("color: GREEN (0x%08X)\n", c); break; case BLUE: printf("Color: BLUE (0x%08X)\n", c); break; } } void InitArray(int array[]) { int i = 0; for (i = 0; i < ARRAY_SIZE; i++) { array[i] = i + 1; } } void PrintArray(int array[]) { int i = 0; for (i = 0; i < ARRAY_SIZE; i++) { printf("%d\n", array[i]); } } int main() { enum Color c = GREEN; int array[ARRAY_SIZE] = {0}; PrintColor(c); InitArray(array); PrintArray(array); return 0; }
下面為輸出結(jié)果:
這段程序說明enum 中定義的值是C語(yǔ)言中真正意義上的常量。
二、sizeof 關(guān)鍵字的用法
- sizeof 是編譯器的內(nèi)置指示符
- sizeof 用于計(jì)算類型或變量所占的內(nèi)存大小
- sizeof 的值在編譯期就已經(jīng)確定
sizeof 可以采用以下的用法:
sizeof 是 C 語(yǔ)言的內(nèi)置關(guān)鍵字而不是函數(shù)
- 在編譯過程中所有的 sizeof 將被具體的數(shù)值所替換
- 程序的執(zhí)行過程與 sizeof 沒有任何關(guān)系
下面看一段 sizeof 的本質(zhì)的代碼:
#include<stdio.h> int f() { printf("Autumn Ze"); return 0; } int main() { int var = 0; int size = sizeof(var++); printf("var = %d, size = %d\n", var, size); size = sizeof(f()); printf("size = %d\n", size); return 0; }
下面為輸出結(jié)果:
為什么 var 不等于 1 呢?這是因?yàn)樵诰幾g過程中所有的 sizeof 將被具體的數(shù)值所替換,var++ 這條語(yǔ)句根本得不到執(zhí)行。同樣,f() 函數(shù)也不會(huì)得到執(zhí)行,所以不會(huì)輸出 Autumn Ze,只會(huì)輸出返回值類型 int 的字節(jié)數(shù)。
三、typedef 的意義
typedef 用于給一個(gè)已經(jīng)存在的數(shù)據(jù)類型重命名
typedef 本質(zhì)上不能產(chǎn)生新的類型
typedef 重命名的類型:
- 可以在 typedef 語(yǔ)句之后定義
- 不能被 unsigned 和 signed 修飾
用法:typedef type new_name;
下面看一段 typedef 使用的代碼:
#include<stdio.h> typedef int Int32; struct _tag_point { int x; int y; }; typedef struct _tag_point Point; typedef struct { int length; int array[]; }SoftArray; typedef struct _tag_list_node ListNode; struct _tag_list_node { ListNode* next; }; int main() { Int32 i = -100; //unsigned Int32 ii = 0; Point p; SoftArray* sa = NULL; ListNode* node = NULL; return 0; }
這段代碼主要就是說明typedef 重命名的類型可以在 typedef 語(yǔ)句之后定義,不能被 unsigned 和 signed 修飾。
四、小結(jié)
- enum 用于定義離散值類型
- enum 定義的值是真正意義上的常量
- sizeof 是編譯器的內(nèi)置指示符
- sizeof 不參與程序的執(zhí)行過程
- typedef 用于給類型重命名
- 重名的類型可以在 typedef 語(yǔ)句之后定義
到此這篇關(guān)于C語(yǔ)言詳細(xì)分析講解關(guān)鍵字enum與sizeof及typedef的用法的文章就介紹到這了,更多相關(guān)C語(yǔ)言 enum sizeof typedef內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)商店倉(cāng)庫(kù)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)商店倉(cāng)庫(kù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Opencv二幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)與提取輪廓
這篇文章主要為大家詳細(xì)介紹了Opencv使用二幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)與提取輪廓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03C++數(shù)據(jù)序列化方式(自定義結(jié)構(gòu)體的保存和讀取)
這篇文章主要介紹了C++數(shù)據(jù)序列化方式(自定義結(jié)構(gòu)體的保存和讀取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C++調(diào)用C#的DLL實(shí)現(xiàn)方法
這篇文章主要介紹了C++調(diào)用C#的DLL實(shí)現(xiàn)方法,很有實(shí)用價(jià)值,需要的朋友可以參考下2014-07-07