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