语言的共用体"/>
C语言的共用体
基本介绍
- 共用体属于构造类型,它可以包含多个类型不同的成员
- 共用体有时也被称为联合或者联合体
union 共用体名{成员列表
};
- 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员
#include <stdio.h>union data{ // data 就是一个共用体(内存布局), 包含三个成员, 共享数据空间, 该空间的大小以占用最大的成员为准int n;char ch;short m;
};
void main(){union data a; //定义两个一个 共用体变量 a//sizeof(a)表示共用体占用的空间,sizeof(union data) 也是printf("%d, %d\n", sizeof(a), sizeof(union data) ); // 4, 4a.n = 0x40;//16进制printf("%d, %c, %d\n", a.n, a.ch, a.m);//64 @ 64a.ch = '9'; //9的ASCII码值是57printf("%d, %c, %d\n", a.n, a.ch, a.m);//57 9 57a.m = 0x2059;printf("%d, %c, %d\n", a.n, a.ch, a.m);//8281 Y 8281a.n = 0x3E25AD54;printf("%d, %c, %d\n", a.n, a.ch, a.m);//1042656596 T -21164getchar();
}
共用体所占的内存空间大小为4字节(int)
但是char类型只占1个字节,short类型占用2字节,所以我们只输出最后的一个或两个字节的内容,但是修改输入数据的时候,是按照最大的字节长度来输入的
共用体的实践
定义一个结构体数组
struct Person persons[TOTAL]; // 定义了一个结构体数组
共用体的定义及输出
union{ float score;char course[20];
} sc;//sc 是一个共用体变量
if(persons[i].profession == 's'){ //如果是学生printf("%s\t\t%d\t%c\t%c\t\t%f\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession, persons[i].sc.score);
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define TOTAL 2 //人员总数//定义了一个结构体 Person//union MYUNION {
// float score;
// char course[20];
//};struct Person{char name[20]; //nameint num; //编号char sex;//性别 f => 女 m=>男char profession;//职员 s=>学生 t=>老师union{ float score;char course[20];} sc;//sc 是一个共用体变量//union MYUNION sc;
};void main(){int i;struct Person persons[TOTAL]; // 定义了一个结构体数组 //输入人员信息for(i=0; i<TOTAL; i++){printf("Input info: ");scanf("%s %d %c %c", persons[i].name, &(persons[i].num), &(persons[i].sex), &(persons[i].profession));if(persons[i].profession == 's'){ //如果是学生printf("请输入该学生成绩:");scanf("%f", &persons[i].sc.score);}else{ //如果是老师printf("请输入该老师课程:");scanf("%s", persons[i].sc.course);}fflush(stdin);//刷新}//输出人员信息printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");for(i=0; i<TOTAL; i++){if(persons[i].profession == 's'){ //如果是学生printf("%s\t\t%d\t%c\t%c\t\t%f\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession, persons[i].sc.score);}else{ //如果是老师printf("%s\t\t%d\t%c\t%c\t\t%s\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession, persons[i].sc.course);}}getchar();getchar();
}
更多推荐
C语言的共用体
发布评论