網(wǎng)站怎么編輯石家莊關(guān)鍵詞快速排名
? ? ? ?在C語(yǔ)言中,有一個(gè)關(guān)鍵字叫做typedef,有些人對(duì)此感到很疑惑。不熟悉此知識(shí)的同學(xué)都會(huì)對(duì)編程失去細(xì)心,直接勸退(因?yàn)橹拔揖褪沁@樣)。、
? ? ? ?因?yàn)楹貌蝗菀渍J(rèn)識(shí)了C語(yǔ)言中所有的關(guān)鍵字(就是類型吧,像啥int,char,long,int arr[],char*等等等),但是有時(shí)候卻出現(xiàn)了Student a,TreeTypeData node之類的語(yǔ)句,這些語(yǔ)句一看就令人頭皮發(fā)麻。
Student a;
TreeTypeData node;
? ? ? ?還有那些我們復(fù)制粘貼的代碼,但是一運(yùn)行就報(bào)99個(gè)錯(cuò)誤就崩潰了。
? ? ? ?明明有主函數(shù),但是確實(shí)TreeTypeData這種類型也確實(shí)沒(méi)見(jiàn)過(guò),于是大家看見(jiàn)報(bào)錯(cuò),就感覺(jué)好難,為什么?算了,就這樣吧,不學(xué)了。
? ? ? ?好吧,不得不說(shuō),這種總是給出部分代碼的文章,確實(shí)很容易讓新手退坑,其實(shí)在C語(yǔ)言中,也確實(shí)沒(méi)有這種類型,但是此時(shí)我們的主角就登場(chǎng)了,他們都是通過(guò)使用typedef來(lái)重命名的。
? ? ? ?typedef關(guān)鍵字,其實(shí)是重命名關(guān)鍵字,相當(dāng)于我們給類型起了一個(gè)別名,比如:
typedef int A;
//此時(shí)我們將int類型起了別名 Aint main()
{//定義一個(gè)int變量aint a = 0;//使用 int 別名定義一個(gè)變量 bA b = 0;return 0;
}
? ? ? ? 就好像此時(shí)有一個(gè)人叫int,我們給他起了一別名叫 A 。
? ? ? ?所以此時(shí)你喊他int他會(huì)答應(yīng),喊他A他也會(huì)答應(yīng)。所以以上代碼相當(dāng)于定義了兩個(gè)整形,一個(gè)整形變量a,一個(gè)整形變量b。我們可以觀察a、b的大小來(lái)驗(yàn)證,他們都是同一種類型,是整形,所以占4字節(jié)空間。我們改變它并打印:
typedef int A;
//此時(shí)我們將int類型起了別名 Aint main()
{//定義一個(gè)int變量aint a = 0;//使用 int 別名定義一個(gè)變量 bA b = 0;a = 1;b = 3;printf("a = %d, b = %d\n", a, b);printf("a的大小為:%d\n", sizeof(a));printf("b的大小為:%d\n", sizeof(b));return 0;
}
? ? ? ?起別名目的并不是為了提高程序運(yùn)行效率,而是為了編碼方便,提高代碼的可讀性,令人見(jiàn)名思意。
? ? ? ?之后就是typedef對(duì)結(jié)構(gòu)體的使用了,這也是令人頭疼的地方。我們知道結(jié)構(gòu)體是由成員列表的(詳情請(qǐng)看:結(jié)構(gòu)體和位段-CSDN博客)。
? ? ? ?其實(shí)變量列表我們一般不會(huì)使用,大部分還是給結(jié)構(gòu)體起別名。
typedef struct N
{int a;
}Node;
? ? ? ? 此時(shí)我們給結(jié)構(gòu)體struct N 起了Node的別名。
typedef struct N
{int a;
}Node;int main()
{Node num1 = { 2 };//利用別名定義一個(gè)結(jié)構(gòu)體變量struct N num2 = { 3 };printf("%d\n", num1.a);printf("%d\n", num2.a);return 0;
}
? ? ? ?所以下次看到?jīng)]有見(jiàn)過(guò)的關(guān)鍵字,大家就知道其實(shí)在此之前就已經(jīng)重命名了。?