结构体基础知识点(五)--共用体类型

前期回顾

  结构体基础知识点(一)–建立自己的数据类型
  结构体基础知识点(二)–使用结构体数组
  结构体基础知识点(三)–结构体指针
  结构体基础知识点(四)–用指针处理链表


共用体类型

1. 什么是共用体类型

  用同一段内存单元存放不同类型的变量。而这种使几个不同的变量共享同一段内存的结构,称为 “共用体” 类型的结构。

2. 形式

union  Data
{
	int i;
	char ch;
	float f; 
} a,b,c;

3. 引用共用体变量的方式

如 a.f ;

4. 共用体类型的数据特点

  1. 共用体与结构体非常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有自己的内存,而共用体变量所占内存长度等关于最长的成员的长度。

  2. 同一段内存可以存放几种不同类型的成员,但每一瞬间只能存放其中一个成员。

  3. 可以对共用体变量初始化,但初始化表中只能有一个常量,union Data a = {16}

  4. 共用体变量中起作用的成员是最后一次被赋值的变量。

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

  6. 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,如a = 1 不对。

  7. 可以使用共用体变量的指针做函数参数。

4. 栗子

  有若干个人员的数据,其中有学生和教师。学生的数据包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理

输入
  第一行有一个整数n,表示以下n行分别表示n个人员的数据。保证n不超过100。之后的n行,每行有5项用空格隔开的内容。前4项分别为人员的号码(整数)、姓名(长度不超过9的无空格字符串)、性别(字符,m或f)和职业(字符,s或t)。如果第4项是s,则第5项为一个整数,表示班级;如果第4项是t,则第5项为一个长度不超过9的无空格字符串,表示职务。

#include<stdio.h>
struct person {
	int num;
	char name[10];
	char sex;
	char job;
	union {
	    int clas;  //here class definited clas,因为class是标识符类
	    char position[10];
	}category; // 成员category是共用体变量
}data[100];

int main(){
	
	int n;
	int i;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		
		printf("please enter the data of person:\n");
		scanf("%d %s %c %c",&data[i].num,data[i].name,&data[i].sex,&data[i].job);
		
		if(data[i].job=='s')
			scanf("%d",&data[i].category.clas);
		else if(data[i].job=='t')
			scanf("%s",data[i].category.position);
		else 
			printf("Error!\n");
	}
	printf("\n");
	printf("No.   name     sex  job class/position\n");
	
    for (i = 0; i < n; i++)          
	{
		if (data[i].job == 's')
			printf("%-6d%-10s%-4c%-4c%-10d\n",data[i].num,data[i].name,data[i].sex,data[i].job,data[i].category.clas);
		else
			printf("%-6d%-10s%-4c%-4c%-10s\n",data[i].num,data[i].name,data[i].sex,data[i].job,data[i].category.position);
	}
	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值