上一篇 | 下一篇

C语言教程4-2

发布: 2008-6-26 21:02 | 作者: admin | 来源: | 查看: 0次

二、联合变量的说明

  联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下:

union perdata

{

int class;

char officae[10];

};

union perdata a,b; /*说明a,b为perdata类型*/

或者可同时说明为:

union perdata

{ int class;

char office[10]; }a,b;或直接说明为: union

{ int class;

char office[10]; }a,b

经说明后的a,b变量均为perdata类型。 它们的内存分配示意图如图7―8所示。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于

office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。

联合变量的赋值和使用

  对联合变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,一个联合变量, 每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变员的某一个成员值。

[例7.15]设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。

编程输入人员数据, 再以表格输出。

main()

{

struct

{

char name[10];

int age;

char job;

union

{

int class;

char office[10];

} depa;

}body ;

int n,i;

for(i=0;i<2;i++)

{

printf("input name,age,job and department\n");

scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);

if(body[i].job=='s')

scanf("%d",&body[i].depa.class);

else

scanf("%s",body[i].depa.office);

}

printf("name\tage job class/office\n");

for(i=0;i<2;i++)

{

if(body[i].job=='s')

printf("%s\t%3d %3c %d\n",body[i].name,body[i].age

,body[i].job,body[i].depa.class);

else

printf("%s\t%3d %3c %s\n",body[i].name,body[i].age,

body[i].job,body[i].depa.office);

}

}

  本例程序用一个结构数组body来存放人员数据, 该结构共有四个成员。其中成员项depa是一个联合类型, 这个联合又由两个成员组成,一个为整型量class,一个为字符数组office。在程序的第一个for语句中,输入人员的各项数据,先输入结构的前三个成员name,age和job,然后判别job成员项,如为"s"则对联合depa・class输入(对学生赋班级编号)否则对depa・office输入(对教师赋教研组名)。

字号: | 推荐给好友

44/4<1234

评分:0

我来说两句