共用體類型,結構體類型


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 }
View Code

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM