C語言自定義類型之結(jié)構(gòu)體


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

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

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

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

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

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

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

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


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

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

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

不要否定你的過去,也不要用過去牽扯你的未來。不是因為有希望才去努力,而是努力了,才能看到希望。

