C语言的共用体

编程入门 行业动态 更新时间:2024-10-08 00:27:05

C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言的共用体"/>

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语言的共用体

本文发布于:2024-02-25 08:08:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698326.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!