C/C++中typedef關鍵字詳解


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關鍵字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM