1.共用體類型
1.1 含義:用同一段內存存放不同類型的變量,也就是使用覆蓋技術,后一個數據覆蓋前面的數據,使幾個不同的變量共享同一段內存的結構成為共用體。往往在數據處理中,有時需要對同一段內存空間安排不同的用途,這時用共用體類型比較方便。
1.2 形式
union Data
{
int i;
char ch;
float f;
}a,b,c;
1.3 引用共用體變量的方式
如a.f;
1.4 共用體類型的數據特點
(1).共用體與結構體非常相似,結構體變量所占內存長度等於各個成員占內存長度的和,每個成員分別占有自己的內存,而共用體變量所占內存長度等關於最長的成員的長度。
(2).同一段內存可以存放幾種不同類型的成員,但每一瞬間只能存放其中一個成員。
(3).可以對共用體變量初始化,但初始化表中只能有一個常量,union Data a = {16}。
(4).共用體變量中起作用的是最后一次被賦值的成員變量。
(5)共用體變量的地址和它的各個成員的地址都是同一地址。
(6)不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值,如a = 1 不對。
(7)可以使用共用體變量的指針做函數參數。
(8)共用體類型可以出現在結構體類型定義中,也可以定義共用體數組,繁反之也可以。
舉一個簡單的例子如下:
1 #include<stdio.h> 2 struct 3 { 4 int num; 5 char name[10]; 6 char sex; 7 char job; 8 union 9 { 10 int clas;//成員班級 11 char posion[10];//成員職務 12 }category; //成員共用體變量 13 }person[2]; //定義結構體數組,有兩個元素 14 int main() 15 { 16 int i; 17 for (int i = 0; i < 2; i++) 18 { 19 printf("輸入兩個成員的數據信息:"); 20 scanf_s("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job); 21 if (person[i].job == 's') 22 scanf_s("%d",&person[i].category.posion); 23 else if (person[i].job == 't') 24 scanf_s("%s", &person[i].category.posion); 25 else 26 printf("輸入有誤"); 27 } 28 printf("\n"); 29 printf("詳細信息如下:"); 30 for (int i = 0; i < 2; i++) 31 { 32 if (person[i].job == 's') 33 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.clas); 34 else 35 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.posion); 36 } 37 return 0; 38 }
2.定義和使用結構體變量
含義:由不同類型數據組成的組合型數據結構成為結構體。
2.1 建立結構體
1 struct MyStruct 2 { 3 long num; 4 float score; 5 char name[20]; 6 int age; 7 struct MyStruct *netx; 8 };
2.2 結構體變量的定義
(1).struct 結構體名
{
}變量名列表
如:
1 struct MyStruct 2 { 3 long num; 4 float score; 5 struct MyStruct *netx; 6 }student1,student2;
