C語言:共用體
阿新 • • 發佈:2019-02-15
原文連結:http://blog.csdn.net/juanjuan888/article/details/6634350
定義
使幾個不同的變數共佔同一段記憶體的結構稱為 “共用體”型別的結構.
定義共用體型別變數:
union 共用體名
{
成員表列
}變量表列;
union data { int i; char ch; float f; }a,b,c;
或
union data
{
int i;
char ch;
float f;
};
union data a,b,c;
共用體和結構體的比較:
(1)結構體變數所佔記憶體長度是各成員佔的記憶體長度之和。每個成員分別佔有其自己的記憶體單元。
(2)共用體變數所佔的記憶體長度等於最長的成員的長度。
共用體引用
只有先定義了共用體變數才能引用它,而且不能引用共用體變數,而只能引用共用體變數中的成員。
共用體型別資料的特點
(1)同一個記憶體段可以用來存放幾種不同型別的成員,但在每一瞬時只能存放其中一種,而不是同時存放幾種。
(2) 共用體變數中起作用的成員是最後一次存放的成員,在存入一個新的成員後原有的成員就失去作用。
(3) 共用體變數的地址和它的各成員的地址都是同一地址。
(4) 不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值,又不能在定義共用體變數時對它初始化。
(5) 不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以使用指向共用體變數的指標
(6) 共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別定義中,陣列也可以作為共用體的成員
應用:
#include <stdio.h> struct { int num; char name[10]; char sex; char job; union { int banji; char position[10]; }category; }person[2]; //先設人數為2 void main() { int i; for(i=0;i<2;i++) { scanf("%d %s %c %c", &person[i].num, &person[i].name,&person[i].sex, &person[i].job); if(person[i].job == 'S') scanf("%d", &person[i].category.banji); else if(person[i].job == 'T') scanf("%s", person[i].category.position); else printf(“Input error!”); } printf("\n"); printf("No. name sex job class/position\n"); for(i=0;i<2;i++) { if (person[i].job == 'S') printf(“%-6d%-10s%-3c%-3c%-6d\n”,person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.banji); else printf(“%-6d%-10s%-3c%-3c%-6s\n”,person[i].num, person[i].name,person[i].sex, person[i].job, person[i].category.position); } }