- enum 是 C 語言中的一種自定義類型
- enum 值是能夠根據須要自定義的整型值
- 第一個定義的 enum 值默認爲 0
- 默認狀況下的 enum 值在前一個定義值得基礎上加 1
- enum 類型的變量只能取定義時得離散值
void code() { enum Color { GREEN, // 0 RED = 2, // 2 BLUE, // 3 }; enum Color c = GREEN; printf("%d\n", c); }
- enum 中定義的值是 C 語言中真正意義上的常量
- 在工程中 enum 多用於定義整形常量或離散的整型常量
void code() { enum // 無名枚舉,用於定義常量 { ARRAY_SIZE = 10, // 定義數組大小 }; int array[ARRAY_SIZE] = {0}; int i = 0; for(i=0; i< ARRAY_SIZE; i++) { array[i] = i + 1; } }
#include <stdio.h> enum { ARRAY_SIZE = 10, // 定義常量 }; enum Color { RED = 0x00FF0000, // 定義整形離散值 GREEN = 0x0000FF00, BLUE = 0x000000FF }; void PrintColor(enum Color c) { switch( c ) // 用於 switch case { 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; default: 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); }
輸出: Color: GREEN (0x0000ff00) 1 2 3 4 5 6 7 8 9 10
- sizeof 是編譯器的內置指示符
- sizeof 用於計算類型或變量所佔的內存大小
sizeof 的值在編譯期就以肯定node
- sizeof 用於類型 : sizeof(type)
- sizeof 用於變量 : sizeof(var) 或 sizeof var
void code() { int var = 0; printf("%d\n", sizeof(int)); printf("%d\n", sizeof(var)); printf("%d\n", sizeof var); }
sizeof 是 C 語言的內置關鍵字而不是函數面試
- 在編譯過程當中全部的 sizeof 將被具體的數值所替換
- 程序的執行過程與 sizeof 沒有任何關係
下面的程序輸出什麼?編程
void code() { int var = 0; int size = sizeof(var++); printf("var = %d, size = %d", var, size); }
#include <stdio.h> double f() { printf("D.T.Software\n"); return 0.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); }
輸出: var = 0, size = 4 size = 8 分析: 注意 var = 0 ; sizeof(f()) = 8 sizeof 不是函數,不會在運行時計算變量或類型的值,而是在編譯時,全部的 sizeof 都被具體的值替換。 sizeof(var++) 在編譯時直接被替換,var++ 得不到執行。
面試中...
考官: 你能說說typedef具體的意義嗎?
應聘者: typedef 用於定義一種新的類型...數組
- typedef 用於給一個已經存在的數據類型重命名
- typedef 本質上不能產生新的類型
typedef 重命名的類型:函數
- 能夠在 typedef 語句以後定義
- 不能被 unsigned 和 signed 修飾
用法: typedef type new_namecode
#include <stdio.h> // --- 定義方式 1 typedef int Int32; // --- 定義方式 2 struct _tag_point { int x; int y; }; typedef struct _tag_point Point; // --- 定義方式 3 typedef struct { int lengyh; int array[]; }SoftArray; // --- 定義方式 14 // 編譯器沒有要求被重命名的類型必須先定義在能夠 typedef struct _tag_list_node ListNode; struct _tag_list_node { ListNode* next; }; int main() { Int32 i = -100; // int // unsigned Int32 ii = 0; // Error Point p; // struct _tag_point SoftArray* sa = NULL; ListNode* node = NULL; // struct _tag_list_node }
- enum 用於定義離散值類型
- enum 定義的值是真正意義上的常量
- sizeof 是編譯器的內置指示符
- sizeof 不參與程序的執行過程
typedef 用於給類型重命名內存
- 重命名的類型能夠在 typedef 語句以後
以上內容參考狄泰軟件學院系列課程,請你們保護原創!編譯器