C語(yǔ)言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類(lèi)型數(shù)據(jù)。但是結(jié)構(gòu)是C語(yǔ)言編程中允許您存儲(chǔ)不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)。

結(jié)構(gòu)體的定義
要想定義結(jié)構(gòu),必須用到struct關(guān)鍵字,struct的語(yǔ)句格式:

在struct 中聲明了一個(gè)含有若干新成員的數(shù)據(jù)類(lèi)型。
tag是結(jié)構(gòu)體標(biāo)簽。
member-list是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f,或者其他有效的變量定義。
variable-list結(jié)構(gòu)變量,定義在結(jié)構(gòu)的末尾,最后一個(gè)分號(hào)之前,您可以指定一個(gè)或多個(gè)結(jié)構(gòu)變量。下面是聲明 Book 結(jié)構(gòu)的方式:

在一般情況下,tag、member-list、variable-list這 3 部分至少要出現(xiàn) 2 個(gè)。以下為實(shí)例:

在上面的聲明中,第一個(gè)和第二聲明被編譯器當(dāng)作兩個(gè)完全不同的類(lèi)型,即使他們的成員列表是一樣的,如果令 t3=&s1,則是非法的。
結(jié)構(gòu)體的成員可以包含其他結(jié)構(gòu)體,也可以包含指向自己結(jié)構(gòu)體類(lèi)型的指針,而通常這種指針的應(yīng)用是為了實(shí)現(xiàn)一些更高級(jí)的數(shù)據(jù)結(jié)構(gòu)如鏈表和樹(shù)等。

如果兩個(gè)結(jié)構(gòu)體互相包含,則需要對(duì)其中一個(gè)結(jié)構(gòu)體進(jìn)行不完整聲明,如下所示:

結(jié)構(gòu)體變量的初始化
和其它類(lèi)型變量一樣,對(duì)結(jié)構(gòu)體變量可以在定義時(shí)指定初始值。

執(zhí)行輸出結(jié)果為:
title : C 語(yǔ)言
author: RUNOOB
subject: 編程語(yǔ)言
book_id: 123456
訪(fǎng)問(wèn)結(jié)構(gòu)成員
為了訪(fǎng)問(wèn)結(jié)構(gòu)的成員,我們使用成員訪(fǎng)問(wèn)運(yùn)算符(.)。成員訪(fǎng)問(wèn)運(yùn)算符是結(jié)構(gòu)變量名稱(chēng)和我們要訪(fǎng)問(wèn)的結(jié)構(gòu)成員之間的一個(gè)句號(hào)。您可以使用struct關(guān)鍵字來(lái)定義結(jié)構(gòu)類(lèi)型的變量。下面的實(shí)例演示了結(jié)構(gòu)的用法:


當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

結(jié)構(gòu)作為函數(shù)參數(shù)
您可以把結(jié)構(gòu)作為函數(shù)參數(shù),傳參方式與其他類(lèi)型的變量或指針類(lèi)似。您可以使用上面實(shí)例中的方式來(lái)訪(fǎng)問(wèn)結(jié)構(gòu)變量:


當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

指向結(jié)構(gòu)的指針
您可以定義指向結(jié)構(gòu)的指針,方式與定義指向其他類(lèi)型變量的指針相似,如下所示:
struct Books *struct_pointer;
現(xiàn)在,您可以在上述定義的指針變量中存儲(chǔ)結(jié)構(gòu)變量的地址。為了查找結(jié)構(gòu)變量的地址,請(qǐng)把 & 運(yùn)算符放在結(jié)構(gòu)名稱(chēng)的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結(jié)構(gòu)的指針訪(fǎng)問(wèn)結(jié)構(gòu)的成員,您必須使用 -> 運(yùn)算符,如下所示:
struct_pointer->title;
讓我們使用結(jié)構(gòu)指針來(lái)重寫(xiě)上面的實(shí)例,這將有助于您理解結(jié)構(gòu)指針的概念:


當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

審核編輯 黃宇
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20434瀏覽量
333857 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4785瀏覽量
90048 -
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7643瀏覽量
145539
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言結(jié)構(gòu)體對(duì)齊介紹
嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)大匯總
嵌入式c語(yǔ)言編程(由淺入深)
嵌入式C語(yǔ)言結(jié)構(gòu)設(shè)計(jì)_實(shí)驗(yàn)二
嵌入式底層開(kāi)發(fā)為什么選擇C語(yǔ)言
標(biāo)準(zhǔn)c語(yǔ)言與嵌入式,嵌入式C語(yǔ)言與C語(yǔ)言的區(qū)別
C語(yǔ)言嵌入式培訓(xùn) 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)
嵌入式C語(yǔ)言知識(shí)總結(jié)
嵌入式C語(yǔ)言中結(jié)構(gòu)體封裝函數(shù)詳解
嵌入式C語(yǔ)言之結(jié)構(gòu)體封裝函數(shù)說(shuō)明
嵌入式C語(yǔ)言的結(jié)構(gòu)特點(diǎn)
嵌入式系統(tǒng)中C語(yǔ)言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用
嵌入式中C語(yǔ)言結(jié)構(gòu)體基本實(shí)現(xiàn)
評(píng)論