C語言:共用體

原文鏈接: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);
   }
}


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