typedef是C/C++中一個很關鍵的關鍵字,它的作用是用來給類型起別名。因為在遇上不同數據類型,尤其是復雜類型,typedef的用法有一些細微的差距,所以很多人會有一些疑惑,今天我就來整理一下。
typedef關鍵字主要用來給一下幾種類型起別名:
- 基本數據類型
- 結構體
- 數組
- 枚舉類型
- 指針
- 函數指針
- 指針函數
1. 基本數據類型
使用typedef給基本數據類型起別名很簡單:
//typedef關鍵字 數據類型 別名 typedef int Myint; typedef double Mydouble;
起了別名以后,別名就相當於原類型名的同義詞,能使用原類型的地方就可以使用別名。
2. 結構體
和基本數據類型類似,將別名放在結構體之后
struct Person{ string name; int age; }; //typedef關鍵字 結構體 別名 typedef struct Person P;
3. 數組
給數組起別名時,typedef的用法和單個元素有些區別,別名被擠在數組元素類型和數組元素個數之間。
//typedef關鍵字 數組元素類型 別名[數組元素個數] typedef int C[10]; C t; // t的類型是int[10],也就是包含10個int類型的數組
4. 枚舉類型
和結構體類型類似
enum Color{Red,Green,Blue} primaryColor; //typedef關鍵字 枚舉類型 別名 typedef Color primaryColor; primaryColor G = Red
5. 指針
//typedef關鍵字 指針 別名 typedef char*String; String l = "name";
對指針起別名需要注意的一點就是,如果要對別名加const關鍵字,必須要知道,我們聲明的是一個常量指針,而不能將其按照字面上,理解為指向常量的指針。
typedef char*String; char*p = "hello"; const String P = p; //P++; // 錯誤,P是常量指針,無法自增 const char*S; // 如果將typedef的內容直接替換,很容易得到本行的結果,但這是錯誤的理解,它一個指向常量的指針 S = p; S++; //S是指向常量字符的指針,可以自增
6. 函數指針
給函數指針起別名也和上面的方法類似
//typedef關鍵字 返回值類型 別名 參數類型 typedef int(*Func)(int,int); Func Max; //Max是一個函數指針
7.指針函數
//typedef關鍵字 返回值類型 別名 參數類型 typedef int*Func2(int,int ); Func2 Min;
總結
typedef關鍵字可以給多種數據類型賦值,如果每種情況都單獨去記,可能也不太記得住,所以我在這里推薦一個小技巧:
去掉typedef關鍵字,將原先的別名視為一個變量,這個變量是什么類型,那么這個別名就是這個類型的同義詞。
例如
typedef double D; typedef int A[10];
去掉typedef關鍵字后,D為double類型,那么加上typedef關鍵字后,D即為double的同義詞;去掉typedef關鍵字后,A為int[10]類型,那么加上typedef關鍵字后,A即為int[10]的同義詞。希望這個技巧,有助於大家理解typedef關鍵字。