【C语言笔记初级篇】第七章:结构体相关
目錄
(1)結(jié)構(gòu)體的聲明,定義,初始化和成員訪問(wèn)
A:什么是結(jié)構(gòu)體
B:結(jié)構(gòu)體聲明和定義
C:結(jié)構(gòu)體的初始化
D:成員訪問(wèn)
(2)結(jié)構(gòu)體傳參
(3)結(jié)構(gòu)體自引用
(4)內(nèi)存對(duì)齊
(5)結(jié)構(gòu)體傳參
(6)位段
(1)結(jié)構(gòu)體的聲明,定義,初始化和成員訪問(wèn)
A:什么是結(jié)構(gòu)體
世界上物體的性質(zhì)是復(fù)雜多樣的,就拿人而言,人絕對(duì)不能用一個(gè)整形數(shù)據(jù)(比如說(shuō)身高),或者說(shuō)字符串(比如說(shuō)姓名)而單獨(dú)囊括的,于是我們?cè)诿枋鲆粋€(gè)復(fù)雜對(duì)象的時(shí)候,就要使用的結(jié)構(gòu)體,結(jié)構(gòu)體是一些值的集合,這些值稱(chēng)為成員變量,每個(gè)成員變量可以是不同的類(lèi)型
B:結(jié)構(gòu)體聲明和定義
比如這里我們要描述一個(gè)學(xué)生,一個(gè)學(xué)生的信息主要包括姓名,年齡和學(xué)號(hào)組成
上述我們?cè)趍ain函數(shù)中通過(guò),定義的struct Student 創(chuàng)建了一個(gè)結(jié)構(gòu)體變量S,這樣的創(chuàng)建方式屬于局部變量
我們還可以直接在參數(shù)列表處直接定義,這樣定義的就是全局變量
還有我們經(jīng)常在數(shù)據(jù)結(jié)構(gòu)中見(jiàn)到的一種寫(xiě)法,它其實(shí)相等于就是重新命了一個(gè)名字
C:結(jié)構(gòu)體的初始化
第一點(diǎn):普通初始化
第二點(diǎn):嵌套初始化
結(jié)構(gòu)體的成員可以是標(biāo)量,數(shù)組,指針,甚至是其他結(jié)構(gòu)體
D:成員訪問(wèn)
上述循環(huán)嵌套的訪問(wèn)方式如下
(2)結(jié)構(gòu)體傳參
結(jié)構(gòu)體不能直接使用printf函數(shù)打印,需要打印時(shí)可以自己封裝print函數(shù),而這就涉及到了傳參和傳遞地址的問(wèn)題,結(jié)合前面第五章講到的結(jié)構(gòu)體指針的相關(guān)知識(shí),就有以下兩種打印方式
由于結(jié)構(gòu)體的數(shù)據(jù)比較多,所以我們以后在操作時(shí)要傳結(jié)構(gòu)體的地址,如果傳結(jié)構(gòu)體的值那么對(duì)于內(nèi)存的開(kāi)銷(xiāo)就比較大,如果傳入地址,則只需使用一個(gè)很小的指針就能操作
(3)結(jié)構(gòu)體自引用
這里以單鏈表結(jié)點(diǎn)定義為例。一個(gè)結(jié)構(gòu)體有兩個(gè)部分,一個(gè)部分是數(shù)據(jù)域,一個(gè)部分是指針域,在創(chuàng)造結(jié)點(diǎn)也就是建立結(jié)構(gòu)體成員時(shí),每個(gè)成員除了有一個(gè)數(shù)據(jù)域用來(lái)存放數(shù)據(jù)外還有一個(gè)指針域,在指針域里面存放的是一個(gè)地址,這個(gè)地址指向下一個(gè)結(jié)點(diǎn)也就是下一個(gè)結(jié)構(gòu)體成員的內(nèi)存地址
(4)內(nèi)存對(duì)齊
具體參見(jiàn):C語(yǔ)言重難點(diǎn):內(nèi)存對(duì)齊和位段_快樂(lè)江湖的博客-CSDN博客一:結(jié)構(gòu)體內(nèi)存對(duì)齊(1)為什么要存在內(nèi)存對(duì)齊平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些平臺(tái)只能在某些地址處取得某些特定類(lèi)型的數(shù)據(jù),否則拋出硬件異常。比如,當(dāng)一個(gè)平臺(tái)要取一個(gè)整型數(shù)據(jù)時(shí)只能在地址為4的倍數(shù)的位置取得,那么這時(shí)就需要內(nèi)存對(duì)齊,否則無(wú)法訪問(wèn)到該整型數(shù)據(jù)。性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能的在自然邊界上對(duì)齊。原因在于,為了訪問(wèn)未對(duì)齊內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需一次。核心思想就是:以空間換取時(shí)間(2)結(jié)構(gòu)體對(duì)齊規(guī)則https://blog.csdn.net/qq_39183034/article/details/116457144
(5)結(jié)構(gòu)體傳參
和前面說(shuō)過(guò)的交換兩個(gè)變量的經(jīng)典例子一樣,對(duì)結(jié)構(gòu)體內(nèi)的變量進(jìn)行修改時(shí)需要傳入地址,用結(jié)構(gòu)體指針來(lái)接受,如果只是去使用結(jié)構(gòu)體變量的值的話,就只傳入值即可
(6)位段
具體參見(jiàn)
C語(yǔ)言重難點(diǎn):內(nèi)存對(duì)齊和位段_快樂(lè)江湖的博客-CSDN博客一:結(jié)構(gòu)體內(nèi)存對(duì)齊(1)為什么要存在內(nèi)存對(duì)齊平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些平臺(tái)只能在某些地址處取得某些特定類(lèi)型的數(shù)據(jù),否則拋出硬件異常。比如,當(dāng)一個(gè)平臺(tái)要取一個(gè)整型數(shù)據(jù)時(shí)只能在地址為4的倍數(shù)的位置取得,那么這時(shí)就需要內(nèi)存對(duì)齊,否則無(wú)法訪問(wèn)到該整型數(shù)據(jù)。性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能的在自然邊界上對(duì)齊。原因在于,為了訪問(wèn)未對(duì)齊內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需一次。核心思想就是:以空間換取時(shí)間(2)結(jié)構(gòu)體對(duì)齊規(guī)則https://blog.csdn.net/qq_39183034/article/details/116457144
總結(jié)
以上是生活随笔為你收集整理的【C语言笔记初级篇】第七章:结构体相关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (软件工程复习核心重点)第四章总体设计-
- 下一篇: '0','\0',NULL,EOF的区别