#define 是簡單的字串替換,相比#define,typedef可以用來定義乙個新型別,在c程式中比較常見。
下面總結一下typedef的常用方法。
(1)定義一種型別,方便多多平台使用。
如平台一: typedef long double real
平台一: typedef double real
平台一: typedef float real
這樣在不同平台中使用時,只需要修改typedef定義即可,非常方便。
(2)幫助進行struct定義
eg:
typedef struct student
char* name;
int socre[3];
} student;
如此,在後面定義結構體變數時,只需要student stu1;即可,省去寫struct了。
(3)定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如:
char* pa, pb; // 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,
// 和乙個字元變數;
以下則可行:
typedef char* pchar;
pchar pa, pb;
這種用法很有用,特別是char* pa, pb的定義,初學者往往認為是定義了兩個字元型指標,其實不是,而用typedef char* pchar就不會出現這樣的問題,減少了錯誤的發生。
(4)為複雜的宣告定義乙個新的簡單的別名。方法是:在原來的宣告裡逐步用別名替換一部
分複雜宣告,如此迴圈,把帶變數名的部分留到最後替換,得到的就是原宣告的最簡化
版。舉例:
原宣告:void (*b[10]) (void (*)());
變數名為b,先替換右邊部分括號裡的,pfunparam為別名一:
typedef void (*pfunparam)();
再替換左邊的變數b,pfunx為別名二:
typedef void (*pfunx)(pfunparam);
原宣告的最簡化版:
pfunx b[10];
原宣告:doube(*)() (*e)[9];
變數名為e,先替換左邊部分,pfuny為別名一:
typedef double(*pfuny)();
再替換右邊的變數e,pfunparamy為別名二
typedef pfuny (*pfunparamy)[9];
原宣告的最簡化版:
pfunparamy e;
理解複雜宣告可用的「右左法則」:從變數名看起,先往右,再往左,碰到乙個圓括號
就調轉閱讀的方向;括號內分析完就跳出括號,還是按先右後左的順序,如此迴圈,直
到整個宣告分析完。舉例:
int (*func)(int *p);
首先找到變數名func,外面有一對圓括號,而且左邊是乙個*號,這說明func是乙個指標
;然後跳出這個圓括號,先看右邊,又遇到圓括號,這說明(*func)是乙個函式,所以
func是乙個指向這類函式的指標,即函式指標,這類函式具有int*型別的形參,返回值
型別是int。
int (*func[5])(int *);
func右邊是乙個運算子,說明func是具有5個元素的陣列;func的左邊有乙個*,說明
func的元素是指標(注意這裡的*不是修飾func,而是修飾func[5]的,原因是運算子
優先順序比*高,func先跟結合)。跳出這個括號,看右邊,又遇到圓括號,說明func數
組的元素是函式型別的指標,它指向的函式具有int*型別的形參,返回值型別為int。
這種用法是比較複雜的,出現的頻率也不少,往往在看到這樣的用法卻不能理解,相信以上的解釋能有所幫助。
typedef用法總結
typedef,為現有資料型別建立乙個新的名字。typedef使用最多的就是建立易於記憶的型別名。型別出現在所宣告的變數名字中。例如typedef int size 此處宣告定義了乙個int的同義字,名字為size。主義typedef並不是建立新的型別。它僅僅是為現有型別新增乙個同義字,你可以在任何...
Typedef 用法總結
不管實在c還是c 中,typedef這個詞都不少見,當然出現頻率較高的還是在c 中。typedef與 define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了,看了網上一些c c 的學習者的部落格,其中有一篇關於typedef的總結還是很不錯,由於總結的很好,我就不加修改的引用過...
typedef用法總結
1 定義一種型別的別名,而不只是簡單的巨集替換 一般就用來,定義寫結構體如c中的struct 還有就是對於一些易混淆的 型別定義可以用typedef typdef char char 注意和 define的區別,define是巨集替換,typedef是 2 跨平台的的用法,typdef long l...