C語(yǔ)言自定義類(lèi)型之結(jié)構(gòu)體


前言
上一章節(jié)主要講解的是指針的動(dòng)態(tài)內(nèi)存申請(qǐng),三個(gè)申請(qǐng)函數(shù),realloc,malloc,calloc。本章節(jié)主要是針對(duì)于結(jié)構(gòu)體類(lèi)型做個(gè)講解。剩下的兩種自定義類(lèi)型,聯(lián)合體和枚舉類(lèi)型下個(gè)章節(jié)做介紹。

C語(yǔ)言結(jié)構(gòu)體
在C語(yǔ)言中,結(jié)構(gòu)體是不同數(shù)據(jù)類(lèi)型的元素的集合。該結(jié)構(gòu)用于使用C語(yǔ)言創(chuàng)建用戶定義的數(shù)據(jù)類(lèi)型。作為用于創(chuàng)建用戶定義的數(shù)據(jù)類(lèi)型的結(jié)構(gòu),該結(jié)構(gòu)也被稱為“ C語(yǔ)言中的用戶定義的數(shù)據(jù)類(lèi)型”。換句話說(shuō),結(jié)構(gòu)是不均勻元素的集合。使用結(jié)構(gòu),我們可以定義稱為用戶定義數(shù)據(jù)類(lèi)型的新數(shù)據(jù)類(lèi)型,該數(shù)據(jù)類(lèi)型包含不同數(shù)據(jù)類(lèi)型的多個(gè)值。結(jié)構(gòu)體的正式定義:結(jié)構(gòu)體是單一名稱下不同類(lèi)型元素的集合,它充當(dāng)C中用戶定義的數(shù)據(jù)類(lèi)型。
通常結(jié)構(gòu)體用于定義c編程語(yǔ)言中的記錄。結(jié)構(gòu)體使我們能夠?qū)⒉煌瑪?shù)據(jù)類(lèi)型的元素組合成一個(gè)組。結(jié)構(gòu)體中定義的元素稱為結(jié)構(gòu)成員。

如何創(chuàng)建結(jié)構(gòu)體
要在c語(yǔ)言中創(chuàng)建結(jié)構(gòu)體,我們使用名為“ struct ” 的關(guān)鍵字。我們使用以下語(yǔ)法以c編程語(yǔ)言創(chuàng)建結(jié)構(gòu)體。

以下是創(chuàng)建稱為student的結(jié)構(gòu)的示例,該結(jié)構(gòu)用于保存學(xué)生記錄。

注意點(diǎn)
每個(gè)結(jié)構(gòu)都必須以分號(hào)(;)終止。
“ struct”是一個(gè)關(guān)鍵字,必須僅使用小寫(xiě)字母。

結(jié)構(gòu)體變量創(chuàng)建
在編程語(yǔ)言中,有兩種創(chuàng)建結(jié)構(gòu)變量的方法。我們可以在定義結(jié)構(gòu)的同時(shí)創(chuàng)建結(jié)構(gòu)變量,也可以在使用struct關(guān)鍵字終止結(jié)構(gòu)后創(chuàng)建。
要使用結(jié)構(gòu)變量訪問(wèn)結(jié)構(gòu)的成員,我們使用點(diǎn)(.)運(yùn)算符。考慮以下示例代碼

每當(dāng)我們用結(jié)構(gòu)體變量訪問(wèn)結(jié)構(gòu)的成員時(shí),我們都使用點(diǎn)(.)運(yùn)算符。即:結(jié)構(gòu)體變量.成員方式.
注意點(diǎn)
一個(gè)結(jié)構(gòu)的所有成員可以同時(shí)使用。
在創(chuàng)建結(jié)構(gòu)變量之前,不會(huì)分配任何內(nèi)存。

結(jié)構(gòu)體數(shù)組
對(duì)于結(jié)構(gòu)體數(shù)組,我們先回想一下整型數(shù)組,例如我們要統(tǒng)計(jì)咱們班30個(gè)人的姓名,學(xué)號(hào) ,成績(jī),如果我們用結(jié)構(gòu)體變量來(lái)實(shí)現(xiàn)是不現(xiàn)實(shí)的。那么我們就準(zhǔn)備用結(jié)構(gòu)體數(shù)組來(lái)完成這事。結(jié)構(gòu)體數(shù)組就是同一類(lèi)型的結(jié)構(gòu)體變量的集合,內(nèi)存分布上是連續(xù)的。一個(gè)結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù);如一個(gè)學(xué)生的學(xué)號(hào)、姓名、成績(jī)等數(shù)據(jù).如果有10個(gè)學(xué)生的數(shù)據(jù)需要參加運(yùn)算顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組(如果定義10個(gè)結(jié)構(gòu)體變量太麻煩了)結(jié)構(gòu)體數(shù)組與以前介紹過(guò)的數(shù)值型數(shù)組不同之處:每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類(lèi)型的數(shù)據(jù),它們都分別包括各個(gè)成員。


結(jié)構(gòu)體指針
前面我們通過(guò)“結(jié)構(gòu)體變量名.成員名”的方式引用結(jié)構(gòu)體變量中的成員,除了這種方法之外還可以使用指針。那么,這個(gè)指針變量定義成什么類(lèi)型呢?只能定義成結(jié)構(gòu)體類(lèi)型,且指向什么結(jié)構(gòu)體類(lèi)型的結(jié)構(gòu)體變量,就要定義成什么樣的結(jié)構(gòu)體類(lèi)型。比如指向 struct student 類(lèi)型的結(jié)構(gòu)體變量,那么指針變量就一定要定義成 struct student* 類(lèi)型。
我們看到,用指針引用結(jié)構(gòu)體變量成員的方式是:
(*指針變量名).成員名
指針變量名->成員名
它們是等價(jià)的。“->”是“指向結(jié)構(gòu)體成員運(yùn)算符”,它的優(yōu)先級(jí)同結(jié)構(gòu)體成員運(yùn)算符“.”一樣高。

注意點(diǎn)
只有“指針變量名”后面才能加“->”,千萬(wàn)不要在成員名后面加“->”。綜上所述,以下 3 種形式是等價(jià)的:
結(jié)構(gòu)體變量.成員名。
(*指針變量).成員名。
指針變量->成員名。
其中第 3 種方式很重要,通常都是使用這種方式,另外兩種方式用得不多。后面講鏈表的時(shí)候用的也都是第 3 種方式。

尾言
專(zhuān)欄作業(yè):定義結(jié)構(gòu)體,描述以下表格數(shù)據(jù)。

不要否定你的過(guò)去,也不要用過(guò)去牽扯你的未來(lái)。不是因?yàn)橛邢M湃ヅ?,而是努力了,才能看到希望?/p>
