第10章,結(jié)構(gòu)和聯(lián)合

結(jié)構(gòu)基礎知識

C提供了兩種類型的聚合數(shù)據(jù)類型,數(shù)組和結(jié)構(gòu)。數(shù)組是相同類型的元素的集合,但每個結(jié)構(gòu)的成員可以具有不同的類型;

數(shù)組元素通過下標訪問,每個結(jié)構(gòu)成員都是通過成員名字訪問的;

和數(shù)組名不同,當一個結(jié)構(gòu)變量在表達式中使用時,它并不被替換成一個指針;

相同類型的結(jié)構(gòu)體相互之間可以進行賦值;

1、結(jié)構(gòu)聲明

結(jié)構(gòu)成員

機構(gòu)里的成員可以支持任意類型。

結(jié)構(gòu)成員的訪問當變量為結(jié)構(gòu)體本身時,為直接訪問用變量名.加成員名;

當變量為機構(gòu)體的指針時,為簡介訪問,方式為變量名->成員名。

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

結(jié)構(gòu)的自引用,不是在結(jié)構(gòu)體里還包含結(jié)構(gòu)體本身類型的成員變量(這個遞歸定義是不可以的),而是在結(jié)構(gòu)體里包含其結(jié)構(gòu)體本身的指針變量。

不完整的聲明

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

結(jié)構(gòu)的初始化和多維數(shù)組帶花括號的初始化很相似,一個位于一對花括號內(nèi)部,由逗號分隔的初始值列表可用于結(jié)構(gòu)各個成員的初始化。如果初始列表的值不夠,剩余的結(jié)構(gòu)成員將使用缺省值進行初始化。

struct INIT_EX{

int ? ? ?a;

short ?b[10];

Simple c;

}={

10,

{1,2,3,4,5},

(25,'x',1.9}

};

結(jié)構(gòu)、指針和成員

相互之間的訪問方式就不詳細說了

結(jié)構(gòu)的存儲分配

其中存在對齊要求。為了節(jié)省空間,我們可以通過對機構(gòu)成員重排,但這也許會減少程序的可讀性??臻g和可讀性需要我們自己平衡(可讀性差的時候只能通過加注釋來解決了)。

作為函數(shù)參數(shù)的結(jié)構(gòu)

結(jié)構(gòu)體變量是一個標量,我們可以直接使用按值傳遞傳遞這個變量。但如果一個結(jié)構(gòu)體過大,我們就必須把相應的字節(jié)全部復制到堆棧中,以后再丟棄。這樣實在是沒必要,因此我們一般傳遞結(jié)構(gòu)的指針;

向函數(shù)傳遞指針的缺陷在于函數(shù)現(xiàn)在可以對調(diào)用程序的結(jié)構(gòu)變量進行修改。如果我們不希望如此,可以在函數(shù)中使用const關鍵字修飾。

位段

位段可以實現(xiàn)的功能都可以通過移位和屏蔽來實現(xiàn),只不過位段使用起來更明了些,但位段可移植性很差。

聯(lián)合

在一個成員長度不同的聯(lián)合里,分配給聯(lián)合的內(nèi)存數(shù)量取決于它的最長成員的長度。

聯(lián)合的初始化

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,685評論 1 51
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,615評論 3 44
  • 1.面向?qū)ο蟮某绦蛟O計思想是什么? 答:把數(shù)據(jù)結(jié)構(gòu)和對數(shù)據(jù)結(jié)構(gòu)進行操作的方法封裝形成一個個的對象。 2.什么是類?...
    少帥yangjie閱讀 5,125評論 0 14
  • 一、框架 1、Mac系統(tǒng)及常用工具、進制;C數(shù)據(jù)類型、常量變量、運算符、表達式、格式化輸入輸出 2、關系運算符、邏...
    師景福閱讀 846評論 0 2
  • 9.29 寫在出發(fā)前。 晚,從北京出發(fā),臥鋪,180*50,很緊湊。三排鋪,過道里兩個人背對著也很難通過。我們都略...
    bronco_t閱讀 648評論 2 2

友情鏈接更多精彩內(nèi)容