typedef 宣告,簡稱 typedef,為現有型別建立乙個新的名字。比如人們常常使用 typedef 來編寫更美觀和可讀的**。所謂美觀,意指 typedef 能隱藏笨拙的語法構造以及平台相關的資料型別,從而增強可移植性和以及未來的可維護性。
在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜的型別宣告。
typedef的使用方法如下:
typedef existing_type new_type_name ;
注意:typedef 並不建立新的型別。它僅僅為現有型別新增乙個同義字。
typedef int size;typedef unsigned int word;
第乙個宣告定義了乙個char的同義詞,名字為c,你可以在任何需要int的上下文使用size。
第二個宣告定義了乙個unsigned int的同義詞,名字為word,你可以在任何需要int的上下文使用word。
我們可以不用象下面這樣重複定義有 81 個字元元素的陣列:
char line[81];char text[81];
定義乙個 typedef,每當要用到相同型別和大小的陣列時,可以這樣:
typedef char line[81];line text, secondline;
同樣,可以象下面這樣隱藏指標語法:
typedef char * pstr;pstr str = "abc";
int mystrcmp(pstr, pstr);
函式指標一般用於**,例如訊號處理,libcurl等會應用到**。**是比較常用的技術,而**就要涉及函式指標。
當我們的程式中有以下函式:
void printhello(int i);
然後我們要定義乙個函式指標,指向printhello,並且呼叫這個方法,**如下:
void (*pfunc)(int);pfunc = &printhello;
(*pfunc)(110);
其中void (*pfunc)(int)是宣告乙個函式指標,指向返回值是void,呼叫引數是(int)的函式,變數名是pfunc,pfunc就是函式指標了,以前是函式指標的簡單用法。
大家可以看到,宣告乙個函式指標是比較複雜的,尤其是當你要在多處地方宣告同乙個型別的函式指標變數,**更加複雜,所以有下面簡化的做法:
typedef void (*printhellohandle)(int);
使用**如下:
printhellohandle pfunc;pfunc = &printhello;
(*pfunc)(110);
以後其他地方的程式需要宣告類似的函式指標,只需要下面**:
printhellohandle pfuncother;
這樣,我們的**就變得更加簡潔易懂。
大家在看typedef和陣列,指標以及typedef和函式,可能會覺得typedef比較複雜,但是其實typedef 行為有點像 #define 巨集,用其實際型別替代同義字。
請看看下面例子
typedef char * pstr;pstr mystr;
**pstr mystr,展開之後就是char * mystr,把mystr,替換為語句typedef char * pstr的pstr,展開之後還是char * mystr。
typedef並不建立新的型別,typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文字替換而已。
這些規則可以應用到typedef和陣列:
typedef char line[81];line text;
把text替換為typedef char line[81]的line,展開之後就是
char text[81];
也可以應用到最複雜的typedef和指標
typedef void (*printhellohandle)(int);printhellohandle pfunc;
將pfunc替換typedef void (*printhellohandle)(int),展開之後就是
void (*pfunc)(int);
其實就是宣告乙個pfunc函式指標而已,根本沒有printhellohandle這種型別。
typedef 宣告,簡稱 typedef,為現有型別建立乙個新的名字。比如人們常常使用 typedef 來編寫更美觀和可讀的**。所謂美觀,意指 typedef 能隱藏笨拙的語法構造以及平台相關的資料型別,從而增強可移植性和以及未來的可維護性。
在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜的型別宣告。
typedef的使用方法如下:
typedef existing_type new_type_name ;
注意:typedef 並不建立新的型別。它僅僅為現有型別新增乙個同義字。
typedef int size;typedef unsigned int word;
第乙個宣告定義了乙個char的同義詞,名字為c,你可以在任何需要int的上下文使用size。
第二個宣告定義了乙個unsigned int的同義詞,名字為word,你可以在任何需要int的上下文使用word。
我們可以不用象下面這樣重複定義有 81 個字元元素的陣列:
char line[81];char text[81];
定義乙個 typedef,每當要用到相同型別和大小的陣列時,可以這樣:
typedef char line[81];line text, secondline;
同樣,可以象下面這樣隱藏指標語法:
typedef char * pstr;pstr str = "abc";
int mystrcmp(pstr, pstr);
函式指標一般用於**,例如訊號處理,libcurl等會應用到**。**是比較常用的技術,而**就要涉及函式指標。
當我們的程式中有以下函式:
void printhello(int i);
然後我們要定義乙個函式指標,指向printhello,並且呼叫這個方法,**如下:
void (*pfunc)(int);pfunc = &printhello;
(*pfunc)(110);
其中void (*pfunc)(int)是宣告乙個函式指標,指向返回值是void,呼叫引數是(int)的函式,變數名是pfunc,pfunc就是函式指標了,以前是函式指標的簡單用法。
大家可以看到,宣告乙個函式指標是比較複雜的,尤其是當你要在多處地方宣告同乙個型別的函式指標變數,**更加複雜,所以有下面簡化的做法:
typedef void (*printhellohandle)(int);
使用**如下:
printhellohandle pfunc;pfunc = &printhello;
(*pfunc)(110);
以後其他地方的程式需要宣告類似的函式指標,只需要下面**:
printhellohandle pfuncother;
這樣,我們的**就變得更加簡潔易懂。
大家在看typedef和陣列,指標以及typedef和函式,可能會覺得typedef比較複雜,但是其實typedef 行為有點像 #define 巨集,用其實際型別替代同義字。
請看看下面例子
typedef char * pstr;pstr mystr;
**pstr mystr,展開之後就是char * mystr,把mystr,替換為語句typedef char * pstr的pstr,展開之後還是char * mystr。
typedef並不建立新的型別,typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文字替換而已。
這些規則可以應用到typedef和陣列:
typedef char line[81];line text;
把text替換為typedef char line[81]的line,展開之後就是
char text[81];
也可以應用到最複雜的typedef和指標
typedef void (*printhellohandle)(int);printhellohandle pfunc;
將pfunc替換typedef void (*printhellohandle)(int),展開之後就是
void (*pfunc)(int);
其實就是宣告乙個pfunc函式指標而已,根本沒有printhellohandle這種型別。
typedef用法總結
typedef,為現有資料型別建立乙個新的名字。typedef使用最多的就是建立易於記憶的型別名。型別出現在所宣告的變數名字中。例如typedef int size 此處宣告定義了乙個int的同義字,名字為size。主義typedef並不是建立新的型別。它僅僅是為現有型別新增乙個同義字,你可以在任何...
Typedef 用法總結
不管實在c還是c 中,typedef這個詞都不少見,當然出現頻率較高的還是在c 中。typedef與 define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了,看了網上一些c c 的學習者的部落格,其中有一篇關於typedef的總結還是很不錯,由於總結的很好,我就不加修改的引用過...
typedef用法總結
define 是簡單的字串替換,相比 define,typedef可以用來定義乙個新型別,在c程式中比較常見。下面總結一下typedef的常用方法。1 定義一種型別,方便多多平台使用。如平台一 typedef long double real 平台一 typedef double real 平台一 ...