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 教科書上的解釋為 資料結構的表示 儲...