共用体类型,结构体类型

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;

 

posted on 2017-03-12 19:34  程序员简笔  阅读(2441)  评论(2编辑  收藏  举报

导航