typedef

typedef 的作用是給存在的類型起一個新的名稱掏愁。

使用場合有:

1>:基本數(shù)據(jù)類型

2>:指針

3>:機構體

4>:枚舉

5>:執(zhí)行函數(shù)的指針

例如:? typedef? int? myint;

//? 給int 起了一個新的名稱 myint ;

? ? myint a = 20;

上面這兩行就等價于: int? a = 20;

例如:? char? * name = "itcast ";

? typedef char * string ;

string name = " itcast ";

上面這兩句也是等價的扁瓢。

例如:

struct? person?

{

? int? age ;

? int no ;

};

struct person a = {20,2};

就相當于:? typedef? struct person? p;

? p a = {20,2};

也可以這樣寫:

typedef? struct? person?

{

? int? age ;

? int no ;

}? p;

p a = {20,2};

因為結(jié)構體有兩種定義方式:

struct? ?

{

? int? age ;

? int no ;

}? personal;

personal.age = 20;

personal.no = 2;

替換為:

tyoedef? struct?

{

? int? age ;

? int no ;

}? personal;

personal a = {20,2};?

這種定義方式省略了 類型名稱。也是可以的蹲坷,但是此種情況下,只能用新起的這個名稱personal 來定義新的結(jié)構體變量士飒。不能在用? struct 類型名? 變量名這種方式了眼姐。

指向函數(shù)的指針:

例如:

int? sum (? int a ,int b)

{ ?

return? a+b;

}

int? (*p)? (int ,int );

p = sum;

//? 定義了一個指向函數(shù) sum 的指針 p .

可以這樣:

typedef? int (*mypoint )? (int ,int);

mypoint? p = sum ;

typedef的語法規(guī)則其實很簡單剃允,一句話來說就是定義對象的語法前加關鍵字typedef球化,剩下的不變,原本定義的對象標識符換成類型標識符呕缭,對應語義從定義一個對象改成定義一個類型別名堵泽。typedef看起來復雜根本原因是對象定義的語法比較復雜,例如分隔符*和[]的用法臊旭。

typedef struct node{

datatype data;

struct node *lchild,*rchild;

} bintnode;

對應的對象定義:

struct node{

datatype data;

struct node *lchild,*rchild;

}bintnode;

去除bintnode來看就是一個類型struct node的完整描述落恼。加上了bintnode來看箩退,表示定義了一個struct node類型的對象bintnode离熏。

現(xiàn)在前面有typedef,因此這個bintnode不是對象名而是類型名戴涝。也就是定義了一個類型別名bitnode滋戳,實際上指的就是struct node這個完整類型。

typedef定義的類型別名在作用域內(nèi)和被定義的原類型語義上等價啥刻,都是表示同一個類型的名稱奸鸯。這里typedef之后bitnode可以和struct node互相代替(注意在C++中,如果同一命名空間內(nèi)類型名和對象名沒有重復可帽,那么struct可以省略娄涩,struct node等價于node)。

更復雜一點的:

struct node{

datatype data;

struct node *lchild,*rchild;

}bintnode, *bintree;

注意定義對象時*修飾對象本身而不是修飾類型。因此這里定義了struct node對象bintnode和struct node*類型的對象bintree蓄拣。

對應的類型定義:

struct node{

datatype data;

struct node *lchild,*rchild;

}bintnode, *bintree;

這里定義了類型別名bintnode表示完整類型struct node扬虚,以及bintree表示類型struct node*。

拆開來就成了

typedef struct node{

datatype data;

struct node *lchild,*rchild;

}bintnode;

typedef bintnode *bintree;

這種寫法看起來應該稍微清楚了一點球恤。

至于下面的cirqueue辜昵,和上面的bintnode類似,只是這里省略了結(jié)構體名稱咽斧,是一個匿名類型堪置。這樣寫的主要好處是類型名可以省略struct

枚舉:

? enum? season

{

? speing,

? summer,

? autumn?,

winter

} ;

enum season a = spring ;

可以替換為:

? typedef? enum? season

{

? speing,

? summer,

? autumn?,

winter

}? myseason;

myseason a = spring ;

typedef? 使用注意:

某些時候可以和 # define 互換,因為宏定義實際是文本替換张惹。而 typedef 是類型替換

例如:

# defined myint? int;

myint a = 10;

與 typedef? int? myint ;

? myint? a = 10;

這幾句代碼是等價的 舀锨,都相當于: int a = 10;

但是有時候則不行,例如:

1:typedef? char * str;

str p1, p2;

p1= "jack";

p2 = "rose";

2: #define str2? char * str;

str2 p3, p4;

//? 相當于? char *? p3,p4;

//? 分別為: char * p3;

//? ? char p4;

宏定義只是文本替換 不是類型替換诵叁,所以只有p3是指針類型的雁竞。

此時# define? 和 typedef 兩者是不能互換的。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拧额,一起剝皮案震驚了整個濱河市碑诉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侥锦,老刑警劉巖进栽,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恭垦,居然都是意外死亡快毛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門番挺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唠帝,“玉大人,你說我怎么就攤上這事玄柏〗笏ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵粪摘,是天一觀的道長瀑晒。 經(jīng)常有香客問我,道長徘意,這世上最難降的妖魔是什么苔悦? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮椎咧,結(jié)果婚禮上玖详,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蟋座,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布劳澄。 她就那樣靜靜地躺著,像睡著了一般蜈七。 火紅的嫁衣襯著肌膚如雪秒拔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天飒硅,我揣著相機與錄音砂缩,去河邊找鬼。 笑死三娩,一個胖子當著我的面吹牛庵芭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雀监,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼双吆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了会前?” 一聲冷哼從身側(cè)響起好乐,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓦宜,沒想到半個月后蔚万,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡临庇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年反璃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片假夺。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淮蜈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出已卷,到底是詐尸還是另有隱情梧田,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布悼尾,位于F島的核電站柿扣,受9級特大地震影響肖方,放射性物質(zhì)發(fā)生泄漏闺魏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一俯画、第九天 我趴在偏房一處隱蔽的房頂上張望析桥。 院中可真熱鬧,春花似錦、人聲如沸泡仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爬泥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崩瓤,已是汗流浹背袍啡。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工境输, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖系。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓嗅剖,卻偏偏與公主長得像窗悯,于是被迫代替她去往敵國和親偷拔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • typedef用來聲明一個別名,typedef后面的語法蛤签,是一個聲明震肮。本來以為這里不會產(chǎn)生什么誤解的,但結(jié)果卻出乎...
    Mr_Me閱讀 836評論 0 4
  • 一鲫尊、基本定義 typedef為C語言的關鍵字沦偎,作用是為一種數(shù)據(jù)類型定義一個新名字。這里的數(shù)據(jù)類型包括內(nèi)部數(shù)據(jù)類型(...
    Cheriez閱讀 2,259評論 0 1
  • typedef是類型定義的意思谈火。typedef struct 是為了使用這個結(jié)構體方便舌涨。 具體區(qū)別在于: 若str...
    smile刺客閱讀 8,448評論 1 2
  • 第一囊嘉、四個用途 用途一: 定義一種類型的別名哗伯,而不只是簡單的宏替換『干玻可以用作同時聲明指針型的多個對象虐块。比如:cha...
    PengboGai閱讀 3,887評論 1 3
  • typedef的用法總結(jié)轉(zhuǎn)載 2015年02月28日 13:40:16 標簽:c++ 373第一贺奠、四個用途 用途一...
    toobai閱讀 570評論 0 0