- N +

結(jié)構(gòu)體定義和使用typedef,c語(yǔ)言typedef定義結(jié)構(gòu)體

大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下結(jié)構(gòu)體定義和使用typedef的問(wèn)題,以及和c語(yǔ)言typedef定義結(jié)構(gòu)體的一些困惑,大家要是還不太明白的話,也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享,希望可以幫助到大家,解決大家的問(wèn)題,下面就開(kāi)始吧!

數(shù)據(jù)結(jié)構(gòu)中typedef

類(lèi)型定義符typedefC語(yǔ)言不僅提供了豐富的數(shù)據(jù)類(lèi)型,而且還允許由用戶自己定義類(lèi)型說(shuō)明符,也就是說(shuō)允許由用戶為數(shù)據(jù)類(lèi)型取“別名”。類(lèi)型定義符typedef即可用來(lái)完成此功能。例如,有整型量a,b,其說(shuō)明如下:inta,b;其中int是整型變量的類(lèi)型說(shuō)明符。int的完整寫(xiě)法為integer,為了增加程序的可讀性,可把整型說(shuō)明符用typedef定義為:typedefintINTEGER這以后就可用INTEGER來(lái)代替int作整型變量的類(lèi)型說(shuō)明了。例如:INTEGERa,b;它等效于:inta,b;用typedef定義數(shù)組、指針、結(jié)構(gòu)等類(lèi)型將帶來(lái)很大的方便,不僅使程序書(shū)寫(xiě)簡(jiǎn)單而且使意義更為明確,因而增強(qiáng)了可讀性。例如:typedefcharNAME[20];表示NAME是字符數(shù)組類(lèi)型,數(shù)組長(zhǎng)度為20。然后可用NAME說(shuō)明變量,如:NAMEa1,a2,s1,s2;完全等效于:chara1[20],a2[20],s1[20],s2[20]又如:又如:typedefstructstu{charname[20];intage;charsex;}STU;定義STU表示stu的結(jié)構(gòu)類(lèi)型,然后可用STU來(lái)說(shuō)明結(jié)構(gòu)變量:STUbody1,body2;typedef定義的一般形式為:typedef原類(lèi)型名新類(lèi)型名其中原類(lèi)型名中含有定義部分,新類(lèi)型名一般用大寫(xiě)表示,以便于區(qū)別。有時(shí)也可用宏定義來(lái)代替typedef的功能,但是宏定義是由預(yù)處理完成的,而typedef則是在編譯時(shí)完成的,后者更為靈活方便。

定義結(jié)構(gòu)體的關(guān)鍵字是()。A. union B. enum C. struct D. typedef

struct是結(jié)構(gòu)體的關(guān)鍵字,是用來(lái)定義結(jié)構(gòu)體的,而typedef是定義自定義類(lèi)型的關(guān)鍵字。可以定義自定義類(lèi)型。typedefenum表示定義了一個(gè)枚舉型的數(shù)據(jù)結(jié)構(gòu),typedefstruct也是定義了一種數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)包含多個(gè)數(shù)據(jù)項(xiàng)。typedef的用途typedef可以看作是typedefine的縮寫(xiě),意思就是定義類(lèi)型,也可以說(shuō)它是給已有的類(lèi)型重新定義一個(gè)新的別名,而不是產(chǎn)生一個(gè)新的類(lèi)型typedef和宏定義有些類(lèi)似,但是又有不同:

1.typedef給出的符號(hào)名稱(chēng)僅限于對(duì)類(lèi)型,而不是對(duì)值,并不是簡(jiǎn)單的宏替換,可以用作同時(shí)聲明指針型的多個(gè)對(duì)象

2.可以使程序參數(shù)化,提高程序的移植性

3.可以使表達(dá)式更加簡(jiǎn)潔,如上面的結(jié)構(gòu)體的定義

4.能夠?yàn)槠渌鼜?fù)雜的聲明定義一個(gè)簡(jiǎn)單的別名

不定長(zhǎng)結(jié)構(gòu)體定義

typedefstructItem

{

DATAdata;//你想要存儲(chǔ)的一些屬性等

intiSize;//后續(xù)數(shù)據(jù)的大小

characData[1];//從這里開(kāi)始記錄你的數(shù)據(jù)

}Item;

每次為一個(gè)新的Item申請(qǐng)空間時(shí),申請(qǐng)大小為:

sizeof(Item)+iDataSize

這里的iDataSize就是你想存儲(chǔ)的活用空間大小。

調(diào)用的時(shí)候,直接寫(xiě)結(jié)構(gòu)體的acData[n]就可以了,可能會(huì)浪費(fèi)幾個(gè)字節(jié)的空間,但這些應(yīng)該可以忽略。

原理是將acData[0]當(dāng)作數(shù)據(jù)開(kāi)始的部分,而acData[n]雖然越界了,但在你申請(qǐng)的空間范圍內(nèi),所以不會(huì)有問(wèn)題。

另外一種方法是在結(jié)構(gòu)體里聲明一個(gè)指針,用指針來(lái)記錄數(shù)據(jù)的位置。

C語(yǔ)言中typedefstruct和struct區(qū)別

舉個(gè)例子說(shuō)明:typedefstructabc{intx;inty;intz;}ABC;是將結(jié)構(gòu)體abc類(lèi)型重新起個(gè)名字為ABC,以后再定義同一類(lèi)型的變量時(shí),可以寫(xiě)成:ABCm,n;與:structabcm,n;作用是一樣的。可將復(fù)雜數(shù)據(jù)類(lèi)型簡(jiǎn)單化

數(shù)據(jù)結(jié)構(gòu)中的結(jié)構(gòu)體定義typedefstr

定義的結(jié)構(gòu)體并為它起個(gè)別名叫做HString也就是HStirng是一個(gè)新的結(jié)構(gòu)體類(lèi)型,可以用他直接定義變量比如HStirngsh;那么這sh就是個(gè)結(jié)構(gòu)體變量他的結(jié)構(gòu)就是{char*str;intlength;}typedef就是給一個(gè)類(lèi)型定義個(gè)別名

關(guān)于本次結(jié)構(gòu)體定義和使用typedef和c語(yǔ)言typedef定義結(jié)構(gòu)體的問(wèn)題分享到這里就結(jié)束了,如果解決了您的問(wèn)題,我們非常高興。

返回列表
上一篇:
下一篇: