typedef與#define

版權聲明:轉載請註明作者和鏈接 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 兩個指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章