日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言笔记初级篇】第七章:结构体相关

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言笔记初级篇】第七章:结构体相关 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

(1)結(jié)構(gòu)體的聲明,定義,初始化和成員訪問

A:什么是結(jié)構(gòu)體

B:結(jié)構(gòu)體聲明和定義

C:結(jié)構(gòu)體的初始化

D:成員訪問

(2)結(jié)構(gòu)體傳參

(3)結(jié)構(gòu)體自引用

(4)內(nèi)存對齊

(5)結(jié)構(gòu)體傳參

(6)位段


(1)結(jié)構(gòu)體的聲明,定義,初始化和成員訪問

A:什么是結(jié)構(gòu)體

世界上物體的性質(zhì)是復(fù)雜多樣的,就拿人而言,人絕對不能用一個(gè)整形數(shù)據(jù)(比如說身高),或者說字符串(比如說姓名)而單獨(dú)囊括的,于是我們在描述一個(gè)復(fù)雜對象的時(shí)候,就要使用的結(jié)構(gòu)體,結(jié)構(gòu)體是一些值的集合,這些值稱為成員變量,每個(gè)成員變量可以是不同的類型

B:結(jié)構(gòu)體聲明和定義

比如這里我們要描述一個(gè)學(xué)生,一個(gè)學(xué)生的信息主要包括姓名,年齡和學(xué)號(hào)組成

上述我們在main函數(shù)中通過,定義的struct Student 創(chuàng)建了一個(gè)結(jié)構(gòu)體變量S,這樣的創(chuàng)建方式屬于局部變量

我們還可以直接在參數(shù)列表處直接定義,這樣定義的就是全局變量

還有我們經(jīng)常在數(shù)據(jù)結(jié)構(gòu)中見到的一種寫法,它其實(shí)相等于就是重新命了一個(gè)名字

C:結(jié)構(gòu)體的初始化

第一點(diǎn):普通初始化

第二點(diǎn):嵌套初始化

結(jié)構(gòu)體的成員可以是標(biāo)量,數(shù)組,指針,甚至是其他結(jié)構(gòu)體

D:成員訪問

上述循環(huán)嵌套的訪問方式如下

(2)結(jié)構(gòu)體傳參

結(jié)構(gòu)體不能直接使用printf函數(shù)打印,需要打印時(shí)可以自己封裝print函數(shù),而這就涉及到了傳參和傳遞地址的問題,結(jié)合前面第五章講到的結(jié)構(gòu)體指針的相關(guān)知識(shí),就有以下兩種打印方式

由于結(jié)構(gòu)體的數(shù)據(jù)比較多,所以我們以后在操作時(shí)要傳結(jié)構(gòu)體的地址,如果傳結(jié)構(gòu)體的值那么對于內(nèi)存的開銷就比較大,如果傳入地址,則只需使用一個(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ù)域用來存放數(shù)據(jù)外還有一個(gè)指針域,在指針域里面存放的是一個(gè)地址,這個(gè)地址指向下一個(gè)結(jié)點(diǎn)也就是下一個(gè)結(jié)構(gòu)體成員的內(nèi)存地址

(4)內(nèi)存對齊

具體參見:C語言重難點(diǎn):內(nèi)存對齊和位段_快樂江湖的博客-CSDN博客一:結(jié)構(gòu)體內(nèi)存對齊(1)為什么要存在內(nèi)存對齊平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問任意地址上的任意數(shù)據(jù)的;某些平臺(tái)只能在某些地址處取得某些特定類型的數(shù)據(jù),否則拋出硬件異常。比如,當(dāng)一個(gè)平臺(tái)要取一個(gè)整型數(shù)據(jù)時(shí)只能在地址為4的倍數(shù)的位置取得,那么這時(shí)就需要內(nèi)存對齊,否則無法訪問到該整型數(shù)據(jù)。性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能的在自然邊界上對齊。原因在于,為了訪問未對齊內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對齊的內(nèi)存訪問僅需一次。核心思想就是:以空間換取時(shí)間(2)結(jié)構(gòu)體對齊規(guī)則https://blog.csdn.net/qq_39183034/article/details/116457144

(5)結(jié)構(gòu)體傳參

和前面說過的交換兩個(gè)變量的經(jīng)典例子一樣,對結(jié)構(gòu)體內(nèi)的變量進(jìn)行修改時(shí)需要傳入地址,用結(jié)構(gòu)體指針來接受,如果只是去使用結(jié)構(gòu)體變量的值的話,就只傳入值即可

(6)位段

具體參見

C語言重難點(diǎn):內(nèi)存對齊和位段_快樂江湖的博客-CSDN博客一:結(jié)構(gòu)體內(nèi)存對齊(1)為什么要存在內(nèi)存對齊平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問任意地址上的任意數(shù)據(jù)的;某些平臺(tái)只能在某些地址處取得某些特定類型的數(shù)據(jù),否則拋出硬件異常。比如,當(dāng)一個(gè)平臺(tái)要取一個(gè)整型數(shù)據(jù)時(shí)只能在地址為4的倍數(shù)的位置取得,那么這時(shí)就需要內(nèi)存對齊,否則無法訪問到該整型數(shù)據(jù)。性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能的在自然邊界上對齊。原因在于,為了訪問未對齊內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對齊的內(nèi)存訪問僅需一次。核心思想就是:以空間換取時(shí)間(2)結(jié)構(gòu)體對齊規(guī)則https://blog.csdn.net/qq_39183034/article/details/116457144

總結(jié)

以上是生活随笔為你收集整理的【C语言笔记初级篇】第七章:结构体相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。