基于typedef的用法詳解
也許新手用這個(gè)關(guān)鍵字不多,但它卻是一個(gè)很有用的關(guān)鍵字,可以使代碼模塊化程度更好(即與其它代碼的關(guān)聯(lián)較少),在C++中還是實(shí)現(xiàn)Traits技術(shù)的基礎(chǔ),也是模板編程的基本語(yǔ)法之一。
若說(shuō)變量定義是為變量命名,而typedef(或稱為類型定義)就是為類型命名。既然都是命名,那就會(huì)有很多類似的地方。而變量定義我想大家都會(huì)使用,因此類型定義也必然會(huì)使用。
類型定義的語(yǔ)法可以歸結(jié)為一句話:只要在變量定義前面加上typedef,就成了類型定義。這兒的原本應(yīng)該是變量的東西,就成為了類型。
如,下面的變量定義:
int integer; //整型變量
int *pointer; //整型指針變量
int array [5]; //整型數(shù)組變量
int *p_array [5]; //整型指針的數(shù)組的變量
int (*array_pointer) [5];//整型數(shù)組的指針的變量
int function (int param);//函數(shù)定義,也可將函數(shù)名看作函數(shù)的變量
int *function (int param);//仍然是函數(shù),但返回值是整型指針
int (*function) (int param);//現(xiàn)在就是指向函數(shù)的指針了
若要定義相應(yīng)類型,即為類型來(lái)起名字,就是下面的形式:
typedef int integer_t; //整型類型
typedef int *pointer_t; //整型指針類型
typedef int array_t [5]; //整型數(shù)組類型
typedef int *p_array_t [5]; //整型指針的數(shù)組的類型
typedef int (*array_pointer_t) [5]; //整型數(shù)組的指針的類型
typedef int function_t (int param); //函數(shù)類型
typedef int *function_t (int param); //函數(shù)類型
typedef int (*function_t) (int param); //指向函數(shù)的指針的類型
注意:上面的函數(shù)類型在C中可能會(huì)出錯(cuò),因?yàn)镃中并沒有函數(shù)類型,它的函數(shù)變量會(huì)自動(dòng)退化成函數(shù)指針;在C++中好像是可以的。在這里主要說(shuō)明的是形式上的相似性.
typedef的一般形式為:
typedef 類型 定義名;
在編程中使用typedef目的一般有兩個(gè),一個(gè)是給變量一個(gè)易記且意義明確的新名字,另一個(gè)是簡(jiǎn)化一些比較復(fù)雜的類型聲明。
其實(shí),在C語(yǔ)言中聲明變量的時(shí)候,有個(gè)存儲(chǔ)類型指示符(storage-class-specifier),它包括我們熟悉的extern、static、auto、register。在不指定存儲(chǔ)類型指示符的時(shí)候,編譯器會(huì)根據(jù)約定自動(dòng)取缺省值。另外,存儲(chǔ)類型指示符的位置也是任意的(但要求在變量名和指針*之前),也就是說(shuō)以下幾行代碼是等價(jià)的:
static const int i;
const static int i;
int const static i;
const int static i;
根據(jù)C語(yǔ)言規(guī)范,在進(jìn)行句法分析的時(shí)候,typedef和存儲(chǔ)類型指示符是等價(jià)的!所以,我們把上述使用static的地方替換為typedef:
typedef const int i;
const typedef int i;
int const typedef i;
const int typedef i;
上述代碼的語(yǔ)義是:將i定義為一個(gè)類型名,其等價(jià)的類型為const int。以后如果我們有i a代碼,就等價(jià)于const int a。對(duì)于有指針的地方也是一樣的,比如:
int const typedef *t;那么代碼t p。就相當(dāng)于int const *p。
另外,typedef不能和static等存儲(chǔ)類型指示符同時(shí)使用,因?yàn)槊總€(gè)變量只能有一種存儲(chǔ)類型,所以代碼:typedef static int i;是非法的。
使用typedef簡(jiǎn)化復(fù)雜的變量聲明
1)、定義一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整形參數(shù),并返回一個(gè)整型?
第一種方法:int (*a[10])(int);
第二種方法:typedef int (*pfunc)(int);
pfunc a[10];
2)、定義一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)函數(shù)指針(不帶參數(shù),返回值為空)參數(shù),并返回空。
第一種方法:void (*a[10])(void (*)(void));
第二種方法:typedef void (*pfuncParam)(void);
typedef void (*pfunc)(pfuncParam);
pfunc a[10];
3)、一個(gè)指向有10個(gè)函數(shù)指針(不帶參數(shù),返回值為double)數(shù)組的指針
第一種方法:double (*)(void) (*p)[10];
第二種方法:typedef double (*pfunc)(void);
typedef pfunc (*pfuncParam)[10];
pfuncParam p;
總結(jié):
typedef有兩種用法:
一、一般形式,定義已有類型的別名
typedef 類型 定義名;
二、創(chuàng)建一個(gè)新的類型
typedef 返回值類型 新類型名(參數(shù)列表);
您可能感興趣的文章
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 01-10c語(yǔ)言求1+2+...+n的解決方法
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
- 01-10深入二叉樹兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車次數(shù)的問題詳解
- 01-10c語(yǔ)言 跳臺(tái)階問題的解決方法
- 01-10如何判斷一個(gè)數(shù)是否為2的冪次方?若是,并判斷出來(lái)是多少次方


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文