C语言的联合体
- 概念
- 声明和初始化
联合的概念:
将几种不同类型的变量存放到同一段内存中,这种数据结构称为联合或公用体(应用其实并不是那么广泛)
声明语法
union{
类型说明符号 成员名;
...;
};
注意:所有成员使用的时候是内存的相同的位置
联合的长度就是它最长成员的长度
联合变量的定义方式和结构体相同,只需要将关键字替换成union;
联合变量进行初始化必须是联合的**第一个成员类型值**
简单的事例:
#include<stdio.h>
int main(void){
//a,b,c共享了同一段内存
union Element{
int a;
float b;
char c;
}u={10};//初始化第一个元素的数值
printf("a:%d b:%f c:%c\n",u.a,u.b,u.c);
u.b = 3.5f; //赋值
printf("a:%d b:%f c:%c\n",u.a,u.b,u.c);
return 0;
}
代码二:结构体与联合体共同使用:
#include<stdio.h>
struct{
char name[20];
char sex;
char job;//如果学生为s,教师为t
int num;
//定义一个联合体
union{
int class; //班级信息--->对应学生
char position[10]; //职位信息----->对应老师
}category;
}person[2];
int main(void){
int n,i;
for(i = 0; i<2;i++){
printf("Please enter NUM NAME SEX JOB\n");
scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
if(person[i].job == 's'){
printf("please enter the student class\n");
scanf("%d",&person[i].category.class);
}else if(person[i].job == 't'){
printf("please enter the teacher position\n");
scanf("%s",person[i].category.position);
}else{
printf("input Error\n");
}
}
printf("==================================\n");
for(n = 0;n < 2;n++){
if(person[n].job == 't'){
printf("name:%s,sex:%c,job:%c,num:%d,position:%s\n",person[n].name,person[n].sex,person[n].job,person[n].num,person[n].category.position);
}else if(person[n].job == 's'){
printf("name:%s,sex:%c,job:%c,num:%d,class:%d\n",person[n].name,person[n].sex,person[n].job,person[n].num,person[n].category.class);
}
}
return 0;
}
以上的事例代码都是可以直接进行run的,欢迎大家持续访问,会有更多精彩