版權聲明:轉載請註明作者和鏈接 https://blog.csdn.net/Hola_ya/article/details/81268704
typedef 聲明新類型名代替原來的類型
1、簡單的用一個新的類型名代替原有的類型名
typedef int Integer; //指定Integer爲類型名,作用與int相同
Integer i, j; //作用與int i, j;相同,都是定義兩個int類型的變量
2、命名一個簡單的類型名代替複雜的類型表示方法
(1)命名一個新的類型名代替結構體類型
typedef struct
{
int month;
int day;
int year;
}Date;
以上聲明瞭一個新類型名Date,代表上面的一個結構體類型。然後可以用新的類型名Date去定義變量,如:
Date birthday;
Date *p;
(2)命名一個新的類型名代替數組類型
typedef int Num[10];//聲明Num爲整型數組類型名
Num a;//定義a爲整型數組名,它有10個元素
(3)命名一個新的類型名代表指針類型
typedef char * String;//聲明String爲字符指針類型
String p, s[10];//定義p爲字符指針變量,s爲字符指針數組
(4)命名一個新的類型名代替執行函數的指針類型
typedef int (*Pointer)(int, int);//聲明Pointer爲指向函數的指針類型,該函數返回整型值
Pointer p1, p2;//p1, p2爲Pointer類型的指針變量
#define
define在預編譯時處理,只能做簡單的字符串替換。typedef是在編譯階段處理的
Typedef 在C語言中頻繁用以聲明一個已經存在的數據類型的同義字。也可以用預處理
器做類似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上兩種情況的意圖都是要定義dPS 和 tPS 作爲一個指向結構s指針。哪種方法更好呢?(如果有的話)爲什麼?
這是一個非常微妙的問題,任何人答對這個問題(正當的原因)是應當被恭喜的。答案是
:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一個例子擴展爲
struct s * p1, p2;
上面的代碼定義p1爲一個指向結構的指針,p2爲一個實際的結構。
第二個例子正確地定義了p3 和p4 兩個指針。