共用体类型,枚举类型的使用

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。

一般定义形式

   union 共用体名

  { 

       成员表列  

       }变量表列;

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

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

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

4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,并且,不能在定义共用体变量时对它进行初始化。  

5.不能把共用体变量作为函数参数,也不能是函数带回共用体变量,但可以使用指向共用体变量的指针。  

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

书上例题:

//对候选人得票的统计程序,设有3个候选人,每次输入一个得票的候选人的名字,要求输出个人得票的结果
#include<stdio.h>
#include<string.h>
struct person
{
	char name[20];
	int count;
}leader[3]={{"Li",0},{"Wang",0},{"Ma",0}};

void main()
{
	int i,j;
	char leader_name[20];
	for(i=0;i<10;i++)
	{
		scanf("%s",&leader_name);
	for(j=0;j<3;j++)
		if(strcmp(leader_name,leader[j].name)==0)
			leader[j].count++;
	}
	for(j=0;j<3;j++)
		printf("%s:%d\n",leader[j].name,leader[j].count);
}


#include<stdio.h>
struct 
{
	int num;
	char name[20];
	char sex;
	char job;
	union 
	{
		int banji;
		char position[10];
	}category;
}person[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("error!");
	}
	printf("\n");
	printf("No     Name  sex  job  class/position\n");
	for(i=0;i<2;i++)
		if(person[i].job=='s')
			printf("%d %s %c %c %d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.banji);
		else
		{
			printf("%d %s %c %c %s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.position);
		}

}

枚举在C/C++中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。   

例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,   SATURDAY, 就是一个枚举。   

枚举的说明与结构和联合相似, 其形式为:  

 enum 枚举名

    {  

    标识符[=整型常数],  

    标识符[=整型常数],

  ...   

      标识符[=整型常数]  

    } 枚举变量;

书上例题

#include<stdio.h>
void main()
{
	enum color{red,yellow,blue,white,black};
	enum color i,j,k,pri;
	int n,loop;
	n=0;
	for(i=red;i<=black;i++)
		for(j=red;j<=black;j++)
			if(i!=j)
			{
				for(k=red;k<=black;k++)
					if((k!-i) && (k!=j))
					{
						n=n+1;
						printf("-4f",n);
						for(loop=1;loop<=3;loop++)
						{
							switch (loop)
							{
							      case 1:pri=i;break;
							      case 2:pri=j;break;
								  case 3:pri=k;break;
								  default:break;
							}
							switch (pri)
							{
							case red:printf("%-10s",red);
								break;
							case yellow:printf("%-10s",yellow);
								break;
							case blue:printf("%-10s",blue);
								break;
							case white:printf("%-10s",white);
								break;
							case black:printf("%-10s",black);
								break;
							default:
								break;
							}
						}
						printf("\n");
					}
			}
			printf("\nTotal:%5d\n",n);

}



猜你喜欢

转载自blog.csdn.net/iwm_NeXT/article/details/7451993