結構體和共用體

在C語言中,經常有一些定義和概念會混淆,做個筆記。

結構體概述

結構體是用戶根據自己的需求制定一個組合項,這個組合項中包含若干個數據項。

結構體類型的一般形式如下:  

struct 結構體名

{成員列表};

例如:

 struct student

{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

};

其中stduent是結構體名,又稱“結構體標記”,花括號中是該結構體的各個成員,內個成員都進行類型聲明,即

類型名  成員;//如 int num;

成員列表又稱爲“域表”,每個成員也稱爲結構體中的一個域。

結構體的定義和使用

可以採用以下三種方法定義結構體類型變量。

1、首先聲明結構體類型,再定義變量名

如上已經定義了結構體類型 struct student,可以使用它來定義變量,例如:

struct student student1,student2;   //紅色的是結構體類型名,藍色的是結構體變量名。

定義了結構體變量之後,系統會爲它們分配內存單元,student1和student2在內存中各佔59個字節。

2、在聲明類型的同時定義變量

struct student 

{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}student 1,student 2;

3、直接定義結構體類型變量,即不出現結構體名

其形式一般爲:

struct

{

成員列表;

}變量名列表;


結構體數組的定義和結構體變量的定義方法相似,如:

struct student  student [30];

struct student

{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}student [30];


struct 

{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}student [30];


共用體

使得集中不同類型的變量存放在同一段內存單元中,例如:可以把一個整形變量、一個字符型變量、一個實行變量放在同一個地址開始的內存單元中,它們在寸寸中佔的字節數不同,但是都是從同一地址開始存放。也就是使用覆蓋技術買幾個變量相互覆蓋。

共用體類型變量的一般形式爲:

union 共用體名{成員列表}變量列表;

例如:

union data

{

int i;

char ch;

float f;

}a,b,c;


union data a,b,c;//每個變量佔4個字節

“共用體”和“結構體”的定義形式相似,但是含義不同,結構體變量所佔內存成都市各個成員的內存長度之和,每個成員分別佔有自己的內存單元,共用體變量所佔的內存長度等於最長的成員的長度。

共用體類型數據的特點:

1)同一個內存段可以用來存放集中不同的數據,但是每一瞬時只能存放其中一種,而不是集中同時存放。(即每一瞬時只有一個成員起作用)

2)共用體變量中起作用的是成員最後一次存放的成員,在存入新的成員之後,原來的成員就失去作用。

3)共用體變量的地址和它的各成員的地址都是同一地址。

4)不能對共用體變量名賦值,也不能企圖醫用變量名來得到一個值,又不能在敵營共用體變量的時候對它初始化。

5)不能把共用體變量作爲函數參數,也不能使函數待會共用體變量,但是可以使用指向共用體變量的指針。

6)共用體類型可以出現在結構體類型定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型定義中,數組也可以作爲共用體的成員。






















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章