和結構體 結構體型別與結構體變數

2021-10-15 00:15:06 字數 3221 閱讀 4870

結構體(struct)是由一系列具有相同型別或不同型別的資料構成的資料集合,叫做結構體。

在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data type)的一類。

結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。

c 陣列允許定義可儲存相同型別資料項的變數,結構體是 c 程式設計中另一種使用者自定義的可用的資料型別,它允許你儲存不同型別的資料項。

結構體用於表示一條記錄,假設你想要跟蹤圖書館中書本的動態,你可能需要跟蹤每本書的下列屬性:

title 

author 

subject 

book id

為了定義結構體,你必須使用 struct 語句。struct 語句定義了乙個包含多個成員的新的資料型別,struct 語句的格式如下:
struct [結構體名] 

;//注意不要忘記這裡的 ;

其中,struct 是定義結構體型別的關鍵字,定義結構體必不可少;結構體名符合識別符號的命名規則,其次結構體名命名有意義。

struct 結構體名:表示一種結構體型別。

1.  結構體型別定義完成,系統不會為其分配記憶體空間,僅僅只是構造出了一種型別,如果要使用該型別則

需要定義該型別的變數。

2. 結構體型別的資料支援巢狀,但是要在巢狀之前完成被巢狀結構體型別的定義。

3. 在定義結構體型別的時候,結構體外面的大括號不能省略。

4. 構造的型別一般放在全域性,也就是在標頭檔案與主函式之間,型別定義的位置跟變數定義的位置類似具有

全域性和區域性的效果,也就是說具有作用域。

//申明乙個結構體 

struct book 

char title[maxtitl];//乙個字串表示的titile 題目;

char author[maxautl];//乙個字串表示的author作者;

float value;//乙個浮點型表示的value**;

//注意分號不能少,這也相當於一條語句;

這個宣告描述了乙個由兩個字元陣列和乙個float變數組成的結構體,但是注意,他並沒有建立乙個實際的資料物件,而是描述了乙個組成這類物件的元素,【因此,我們也有時候將結構體宣告叫做模板,因為它勾勒出資料該如何儲存,並沒有例項化資料物件】。

之前我們結構體型別的定義(結構體的宣告)只是告訴編譯器該如何表示資料,但是它沒有讓計算機為其分配空間。

我們要使用結構體,那麼就需要建立變數,也就是結構體變數,結構體變數的定義有三種方式。1.  在定義結構體型別的同時,定義結構體型別的變數

//此宣告宣告了擁有3個成員的結構體,兩個陣列成員乙個實型成員

//同時又宣告了結構體變數s1,s2 

//這個結構體有結構體名

struct book 

s1,s2; //可以定義多個變數,變數之間用逗號隔開,也可以使用該型別在需要的定義再次定義變數 

struct book  s3;

2.  在定義結構體型別的同時,不加結構體名,定義結構體型別的變數
//此宣告宣告了擁有3個成員的結構體,兩個陣列成員乙個實型成員 

//同時又宣告了結構體變數library 

//這個結構體並沒有標明其結構體名 

struct

library; 

//注意這裡不再是定義宣告結構體型別,而是直接建立結構體變數了,這個編譯器會分配記憶體的;

//這樣的確可以省略識別符號也就是結構體名,但是只能使用一次;因為這是;宣告結構體的過程和定義結構體變//量的過程合在了一起;並且個成員變數沒有初始化的;

//如果你想多次使用乙個結構體模組,這樣子是行不通的;

3.  先定義結構體型別然後定義結構體型別的變數
//此宣告宣告了擁有3個成員的結構體,兩個陣列成員乙個實型成員

//這個結構體有結構體名,但沒有宣告變數 

struct book

; //定義好結構體型別之後,在後面定義結構體型別的變數 

struct book  s3;

其中,在定義結構體型別變數的時候,可以使用typedef關鍵字對定義的結構體型別進行重新命名,如下:

用typedef定義新型別名來代替已有型別名,即給已有型別重新命名;

一般格式為;typedef 已有型別新型別名;

typedef int elem; 

typedef structstudent; 

student stu1,stu2;

結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如鍊表和樹等。如下為結構體型別的巢狀。
struct bir 

推 薦 閱 讀   

嵌入式工程師的真實現狀...嵌入式經典面試題及解析嵌入式入門的10條學習建議13個嵌入式c語言優化技巧我收藏了,你呢?

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...

結構體型別,變數

二學結構體 結構體型別定義 結構體是一批資料結合而成的新資料的型別。組成的結構型資料可以有不同的資料型別 一般形式 struct 結構體名 如 struct student tips 1.注意括號後的分號必不可少 2.結構體名必須符合識別符號的命名規則。3.成員名有 指標型 有 n 陣列型 結構體變...

結構體變數和指向結構體變數的指標

目錄概念 記憶體分配 物件的引用 結構體變數和結構體指標變數作形參的區別 以結構體變數和結構體指標變數形參的函式呼叫 結構體變數是指將不同的資料型別整合成乙個有機的整體,以便於呼叫。struct student student stud1 stud1就是結構體變數結構體指標變數是指指向結構體變數的指...