C語言結構體

2021-09-19 08:34:29 字數 1793 閱讀 3638

1. 什麼是結構體?

結構體是一種工具,用這個工具可以定義自己的資料型別。

2. 結構體與陣列的比較

(1) 都由多個元素組成

(2) 陣列中各個元素的資料型別相同,而結構體中的各個元素的資料型別可以不相同

3. 結構體的定義和使用

struct 結構體名

;

例如:

struct student

;

(1).定義結構體型別時可以同時定義該型別的變數:

struct student

student,*p,stu[10];//定義結構體型別的普通變數、指標變數和陣列

(2).也可以先定義結構體型別,在定義該型別的變數

struct student

;struct student student,*p,stu[10];

(3).使用typedef定義別名,再用別名定義該型別的變數

typedef struct student

stud;

stud student,*p,stu[10];

4.初始化結構體

struct student

stu[2]=,};

5.引用結構體變數中的成員1) 結構體變數名.成員名:      stu1.name

2) (*結構體指標變數).成員名: (*ps).name

3) 結構體指標變數->成員名:    ps->name

4) 結構體變數陣列名.成員名: stu[0].name

6.結構體變數所佔記憶體空間問題

#includestruct student

;int main()

#includestruct student

;int main()

上面兩個**,結構體中定義變數的順序不同,導致輸出結果不同,第乙個**輸出結果,結構體a佔8個位元組,而第二個佔12個位元組。原因是該結構體中,資料型別佔位元組最大的是int型(4個位元組),所以一次開闢4個位元組;(1).char name佔乙個位元組,開闢四個位元組,剩3個位元組,後面的char num和char ***可以在剩餘的3個位元組內進行補充,最後int math再開闢4個位元組,所以一共佔8個位元組。(2).char name佔1個位元組,開闢4個位元組後,剩3個位元組;char num佔乙個位元組,之前剩3個位元組,num可以進行補充;int math佔4個位元組,開闢4個位元組;char ***佔乙個位元組,再開闢4個位元組,所以是12個位元組。

下面用圖來說明

結論:結構體所佔記憶體一定為最大成員所佔位元組數的倍數。

注意:在使用結構體時,各成員相同資料型別應該放在一起,這樣可以減少空間。

C語言結構體

1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...

C語言 結構體

宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...

c語言 結構體

1 定義結構體 c語言允許使用者自己建立不同型別資料組成的組合型的資料結構 struct 結構體名 1 結構體的型別不是只有一種,可以根據需要設計許多種,如struct student struct worker等 2 結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式 2 定義結構體變數...