在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)共用體類型可以出現在結構體類型定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型定義中,數組也可以作爲共用體的成員。