【C语言进阶深度学习记录】十一 C语言中enum,sizeof,typedef分析
文章目錄
- 1 enum 枚舉類型的使用方法
- 1.1 enum枚舉類型的特殊意義
- 1.2 代碼分析:enum的使用
- 2 sizeof 關(guān)鍵字的用法
- 2.1 代碼案例分析:sizeof的本質(zhì)
- 3 typedef的意義
- 3.1 代碼案例:typedef 的使用案例
- 4 總結(jié)
1 enum 枚舉類型的使用方法
- enum是C語言中的一種自定義類型
- enum是可以根據(jù)需要自定義的整形值
- 第一個(gè)自定義的enum值默認(rèn)為0
- 默認(rèn)情況下,enum值是在前一個(gè)定義值的基礎(chǔ)上加1
- enum類型的變量只能取定義時(shí)的離散值,如:
- 上面的代碼打印結(jié)果是0。所以說enum的變量大小是enum這個(gè)結(jié)構(gòu)里面存的值的某一個(gè)。如上。
注意:enum中的各個(gè)變量之間是逗號隔開的。
1.1 enum枚舉類型的特殊意義
- enum定義的值是C語言中真正意義上的常量,且是整型常量
具體如何定義常量,使用無名枚舉,如下圖所示:
- 使用上述無名枚舉,可以定義真正意義上的常量。所以上述定義數(shù)組時(shí)可以直接用ARRAY_SIZE作為數(shù)組的大小。
1.2 代碼分析:enum的使用
- 代碼11-1-lyy.c:
- 上述代碼編譯運(yùn)行結(jié)果為(gcc 4.4.5編譯器)::
可以看出,無名enum確實(shí)可以定義真正的常量。且使用enum類型,可以定義一組離散數(shù)據(jù),該enum變量是這一組離散數(shù)據(jù)中的一個(gè)
2 sizeof 關(guān)鍵字的用法
注意;sizeof是C語言中的關(guān)鍵字,并不是函數(shù)。就像new/delete是C++的關(guān)鍵字而非函數(shù)一樣
- sizeof是C元編譯器的內(nèi)置指示符
- sizeof用于計(jì)算 類型 或者 變量 所占用內(nèi)存的大小
- sizeof 的值在編譯期就已經(jīng)確定大小。之前學(xué)過的const也是在編譯期間有效,運(yùn)行期間無效。后面還有解釋
- sizeof 用于類型時(shí)是這樣表述的:sizeof(type);
- sizeof 用于變量時(shí)可以有兩種表述方法:sizeof(var) ; 或者 sizeof var ;
如下圖:
注意:
- sizeof 在編譯期間,將被具體的數(shù)值替換,程序執(zhí)行過程中與sizeof沒有任何關(guān)系
- 比如下面的代碼,執(zhí)行后打印什么?
上述代碼執(zhí)行后,var的值依然是0 。因?yàn)閟izeof在編譯期間就確定了具體的數(shù)值。而var++ 是需要在程序運(yùn)行時(shí)計(jì)算的,所以實(shí)際上var++ 在程序運(yùn)行期間就沒有被執(zhí)行,因?yàn)樵诰幾g期間sizeof(var++)已經(jīng)確定了值為4.
2.1 代碼案例分析:sizeof的本質(zhì)
- 代碼:11-2-lyy.c
- 上述代碼編譯運(yùn)行結(jié)果為:
可以看出,上述代碼中,var變量的值依然是0,沒有變化,而且并沒有打印出字符串“Lyy_Leran_C” ,說明函數(shù)f() 也并沒有被執(zhí)行。
以上充分說明了,sizeof在編譯期間就已經(jīng)確定了值的大小。運(yùn)行期間就與sizeof沒有任何關(guān)系了
3 typedef的意義
有一種說法是錯(cuò)誤的:typedef 是用于定義一種新的的類型。。。。。
注意,typedef不是用來定義新類型的,而是給已經(jīng)存在的數(shù)據(jù)類型取一個(gè)別名(或者叫重命名)!!!
- typedef用于給一個(gè)已經(jīng)存在的數(shù)據(jù)類型重命名
- typedef 本質(zhì)上是不能產(chǎn)生新類型的
- typedef 不能被 unsigned 或者signed 修飾 。這在下面的代碼案例中可以看到
- typedef 的用法:typedef type new_name ;
- 可以在typedef 語句之后定義類型 。后面的代碼示例會(huì)解釋這句話的含義
3.1 代碼案例:typedef 的使用案例
- 代碼:11-3-lyy.c
- 上述代碼中的第25行如果不注釋掉的話,程序編譯錯(cuò)誤。這就是之前提到過的typedef 不能被 unsigned 或者signed 修飾
- 將25行注釋掉后,程序編譯通過。沒有具體輸出,知道如何使用即可
- 并且上述代碼中第17行使用的struct _tag_list_node 類型是在后面定義的。 這是允許的
4 總結(jié)
- enum 用于定義離散值類型
- 無名enum 定義的值是真正的常量
- sizeof 是編譯器內(nèi)置的指示符
- sizeof 不參與程序的執(zhí)行過程
- typedef 用于給已經(jīng)存在的類型重命名
- 重命名的類型可以在typedef 語句之后定義
總結(jié)
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】十一 C语言中enum,sizeof,typedef分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stata资源:一些不错的Stata-B
- 下一篇: c++显式加载dll并使用DLL的类