共用体处理任意类型数据

共用体

几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构

共用体是一种数据格式,它能够存储不同的数据类型,但在同一时间只能存储其中的一种类型。共用体的用途之一是,当数据使用两种或更多种格式,但不会同时使用这些格式时,可以节省空间。


union 共用体名
{
   成员列表
}变量列表;

例如

union data

{

    int i;

    char ch;

    float f;

} a, b, c

对于这里定义的共用体变量a,b,c。下面的引用方式是正确的:a.i (引用共用体变量中的整型变量i),

而不能引用共用体变量,例如:printf("%d",a); <==这种用法是错误的。

因为a的存储区内有好几种类型的数据,分别占用不同长度的存储区,这些共用体变量名a,难以使系统确定究竟输出的是哪一个成员的值。

特点

1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。

2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。

3.共用体变量的地址和它的各成员的地址都是同一地址。

4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

int main()
{

    char input;
printf("成员类型\n");
scanf("%c",&input);
printf("数字\n");
switch(input)
{
case 'i':
scanf("%d",&temp.i);
break;
case 'c':
scanf("%c",&temp.c);
break;
case 'f':
scanf("%f",&temp.f);
break;
    case 'd':
scanf("%lf",&temp.d);
break;
}
switch(input)
{
case 'i':
printf("%d",temp.i);
break;
case 'c':
printf("%c",temp.c);
break;
case 'd':
printf("%lf",temp.c);
case 'f':
printf("%f",temp.f);
break;
}
system("pause");
}

猜你喜欢

转载自blog.csdn.net/mashui21/article/details/80542187