C語言typedef用法詳解

2021-10-04 10:27:50 字數 1923 閱讀 2599

typedef(type define)是c語言的關鍵字,它的作用是為一種資料型別定義乙個新名字。一般用來簡化型別定義。

typedef宣告的用法和普通宣告的用法基本相同,只是把typedef放在宣告的前面。

不使用typedef

char

*ptr_to_char;

使用typedef

typedef

char

* ptr_to_char;

ptr_to_char a;

如果你想在多個原始檔使用同一型別的結構,你應該把標籤宣告或typedef形式的宣告放在乙個同一檔案中。當原始檔需要這個宣告時可以使用#include指令把那個標頭檔案包含進來。

typedef

struct

stu;

stu zhangsan;

typedef

char

* p_str1;

#define p_str2 char *;

p_str1 s1,s2;

p_str2 s3,s4;

在上述變數定義中,s1,s2,s3都被定義成char* 而s4被定義成char。因為#define只是簡單的字元替換,而typedef則是為乙個型別起了乙個新名字。

typedef

char

* p_str;

char string[4]

="abc"

;const

char

*p1=string;

const p_str p2=string;

p1++

;p2++

;

p2++會報錯,因為p_str變成了乙個型別。所以const修飾p2,p2不能改變。

用typedef簡化複雜的宣告和定義

這裡再舉乙個例子:

int*(

*a[10])

(int

,char*)

;

用「右左法則」,我們可以很快弄清楚:a是乙個包含10個函式指標的陣列,這些函式的引數列表是(int, char*),返回值型別是int*。理解已經不成問題,這裡的關鍵是如果要定義相同型別的變數b,都得重複書寫:

int*(

*b[10])

(int

,char*)

;

這裡有沒有方便的辦法避免這樣沒有價值的重複?答案就是用typedef來簡化複雜的宣告和定義。

typedef可以給現有的型別起個別名。這裡用typedef給以上a、b的型別起個別名:

typedef int *(a[10]) (int, char); // 在之前定義的前面加入typedef,然後將變數名a替換成型別名a

現在要再定義相同型別的變數c,只需要:

a c;

再看一例:

void

(*b[10]

)(void(*

)())

;

先替換右邊括號裡面的引數,將void (*)()的型別起個別名pparam:

typedef

void

(*pparam)()

;

再替換左邊的變數b,為b的型別起個別名b:

typedef

void

(*b)

(pparam)

;

原宣告的簡化版:

b b[10]

;

參考:

[1]c和指標 人民郵電出版社 2008.4第二版。

[2]高質量嵌入式linux c程式設計。

C語言typedef的用法詳解

c語言允許為乙個資料型別起乙個新的別名,就像給人起 綽號 一樣。起別名的目的不是為了提高程式執行效率,而是為了編碼方便。例如有乙個結構體的名字是 stu,要想定義乙個結構體變數就得這樣寫 struct stu stu1 struct 看起來就是多餘的,但不寫又會報錯。如果為 struct stu 起...

C語言中typedef用法詳解

在c語言中,經常有如下的用法 typedef struct tag mytype,myptr 一旦通過如上定以後,就可以用mytype來定義struct tag結構了。以前我使用typedef的時候,是按照其字面意思理解的,所以進入了乙個誤區。比如說我想定義myint為int型別,我用的 如下 ty...

C語言typedef詳解

在c還是c 中,typedef都使用的很多。typedef與 define有些相似,其實是不同的。基本定義 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字,這裡的資料型別包括基本資料型別 int,char 也包括自定義的資料型別 struct 教科書上的解釋為 資料結構的表示 儲...