typedef用法總結

2021-06-21 17:09:12 字數 1861 閱讀 8465

#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...