1. 程式人生 > >C語言進階——enum, sizeof, typedef 分析11

C語言進階——enum, sizeof, typedef 分析11

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,
12
BLUE = 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