C語言進階——enum, sizeof, typedef 分析11
阿新 • • 發佈:2018-07-26
def 進階 new %d 計算 void var ray 枚舉類型
枚舉類型的使用方法:
- enum是C語言的 一種自定義類型
- enum值是可以根據需要自定義的整型值
- 第一個enum的值默認為0
- 默認情況下的enum值是在前一個定義值的基礎上加 1
- enum類型的變量只能去定義時的離散值
1 enum Color 2 { 3 GREEN, 4 BLUE, 5 RED 6 }; 7 8 enum Color c = GREEN; 9 10 printf("%d\n",c);
枚舉類型的特殊意義:
- enum中定義的值是C語言真正意義上的常量
- 在工程中enum多用於定義整型常量
1 enum //無名枚舉,用於定義常量2 { 3 ARRAY_SIZE =10, //定義數組的大小 4 }; 5 6 int array[ARRAY_SIZE] = {0}; 7 int i=0; 8 for(i=0;i<ARRAY_SIZE;i++) 9 { 10 ayyay[i]=i+1; 11 }
示例分析:
1 #include <stdio.h> 2 3 enum 4 { 5 ARRAY_SIZE = 10 6 }; 7 8 enum Color 9 { 10 RED = 0x00FF0000, 11 GREEN = 0x0000FF00, 12BLUE = 0x000000FF 13 }; 14 15 void PrintColor(enum Color c) 16 { 17 switch( c ) 18 { 19 case RED: 20 printf("Color: RED (0x%08X)\n", c); 21 break; 22 case GREEN: 23 printf("Color: GREEN (0x%08X)\n", c); 24 break; 25 case BLUE:26 printf("Color: BLUE(0x%08X)\n", c); 27 break; 28 } 29 } 30 31 void InitArray(int array[]) 32 { 33 int i = 0; 34 35 for(i=0; i<ARRAY_SIZE; i++) 36 { 37 array[i] = i + 1; 38 } 39 } 40 41 void PrintArray(int array[]) 42 { 43 int i = 0; 44 45 for(i=0; i<ARRAY_SIZE; i++) 46 { 47 printf("%d\n", array[i]); 48 } 49 } 50 51 52 int main() 53 { 54 enum Color c = GREEN; 55 56 int array[ARRAY_SIZE] = {0}; 57 58 PrintColor(c); 59 60 InitArray(array); 61 62 PrintArray(array); 63 64 return 0; 65 }
sizeof 關鍵字的用法:
- sizeof 是編譯器的內置指示符
- sizeof 用於計算類型或變量所占的內存的大小
- sizeof 的值在編譯期就已經確定
sizeof 用於類型:
sizeof(type)
sizeof 用於變量:
sizeof(var) 或 sizeof var --》這種不帶括號的用法可以充分說明sizeof不是一個函數
sizeof 是C語言的內置關鍵字而不是函數
- 在編譯過程中所有的 sizeof 將被具體的數值所替換
- 程序的執行過程與 sizeof 沒有任何關系
思考下面的程序會輸出什麽?
int var =0;
int size = sizeof(var++);
printf("var = %d ,size = %d\n",var,size);
示例:
1 #include <stdio.h> 2 3 int f() 4 { 5 printf("Delphi Tang\n"); 6 7 return 0; 8 } 9 10 int main() 11 { 12 int var = 0; 13 14 int size = sizeof(var++); 15 16 printf("var = %d, size = %d\n", var, size); 17 18 size = sizeof(f()); 19 20 printf("size = %d\n", size); 21 22 return 0; 23 }
輸出結果可能有點意外,因為sizeof在編譯期間就被替換了,所以不會參與到運行期間
下面模擬一個場景
面試中。。。。。
考官:你能說說 typedef 的具體意義嗎?
應聘者:typedef 用於定義一種新的類型。。。
考官:你回家種田吧!
typedef 的意義
- typedef 用於給一個已經存在的數據類型重命名
- typedef 本質上不能產生新的類型
- typedef重命名的類型 1. 可以在typedef 語句後定義 2. 不能被unsigned 和 signed 修飾
- 用法 typedef type new_name
示例:
1 #include <stdio.h> 2 3 typedef int Int32; 4 5 struct _tag_point 6 { 7 int x; 8 int y; 9 }; 10 11 typedef struct _tag_point Point; 12 13 typedef struct 14 { 15 int length; 16 int array[]; 17 } SoftArray; 18 19 typedef struct _tag_list_node ListNode; 20 struct _tag_list_node 21 { 22 ListNode* next; 23 }; 24 25 int main() 26 { 27 Int32 i = -100; // int 28 //unsigned Int32 ii = 0; 29 Point p; // struct _tag_point 30 SoftArray* sa = NULL; 31 ListNode* node = NULL; // struct _tag_list_node* 32 33 return 0; 34 }
小結:
- enum 用於丁意思離散值的類型
- enum 定義的值是真正意義上的常量
- sizeof 是編譯器的內置指示符
- sizeof 不參與程序的執行過程
- typedef 用於給類型重命名,重命名的類型可以在 typedef 語句之後定義
C語言進階——enum, sizeof, typedef 分析11