引入


传统技术的缺陷—结构体

共用体基本介绍

共用体与结构体一样都是值传递

定义共用体的三种方式

内存布局

共用体数据空间=占用最大的成员的数据空间大小

案例解析
1)

2)

3)

4)

注:
1010 1101 0101 0100所对应的十进制是负数
计算机中的二进制都是以补码存储的,所以1010 1101 0101 0100是补码

计算时,补码=>反码=>原码
补码=原码取反+1
所以补码=>原码: 补码-1,再取反
补码: 1010 1101 0101 0100
补码-1: 1010 1101 0101 0011
取反: 1101 0010 1010 1100
计算此时得到的原码:
-(214+212+29+27+25+23+2^2)
=-(16384+4096+512+128+32+8+4)
=-21164
所以输出原码:-21164

记住:计算机中存储的是补码,输出的是原码
正数:原码=反码=补码

案例实践


两种定义共用体的方式都可以

代码
fflush(stdin);//刷新一下输入,保证数据都存入到结构体中

以表格的形式输出信息

练习–公司职员信息

#include<stdio.h>
#include<string.h>
//共用体union--职员信息表格
#define SIZE 100
struct  Staff{char name[10];//姓名int age;//年龄char flag;//标识 a输入公司,b输入职业union Position{//不能使用char *com; 这里是字符串常量,不能改变char com[10];//公司char pro[10];//职业}pos;
}staff[SIZE];//定义结构体数组,存储多个结构体变量
int main()
{int i=0,d=1,j;while(1){printf("input information %d:\n",i);printf("d:\n");scanf("%d",&d);//d=1继续循环,d=0跳出循环if(d==0)//d=0{break;//跳出while循环}else if(d==1)//d=1{printf("name age flag:\n");scanf("%s %d %c",staff[i].name,&(staff[i].age),&(staff[i].flag));if(staff[i].flag=='a'){printf("com:\n");scanf("%s",staff[i].pos.com);}else if(staff[i].flag=='b'){printf("pro:\n");scanf("%s",staff[i].pos.pro);}}i++;}fflush(stdin);printf("exit:\nprint the information:\n");printf("name\tage\tpos\n");for(j=0;j<i;j++){if(staff[j].flag=='a')printf("%s\t%d\t%s\n",staff[j].name,staff[j].age,staff[j].pos.com);else if(staff[j].flag=='b')printf("%s\t%d\t%s\n",staff[j].name,staff[j].age,staff[j].pos.pro);}getchar();//entergetchar();return 0;
}

C语言 共用体/联合体 union相关推荐

  1. 联合体c语言作用,C语言共用体-C语言union-什么是C语言中的联合体-嗨客网

    C语言共用体教程 在 共用体的各个成员会占用不同的内存,互相之间没有影响,而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员. C语言共用体 语法 union unionName{ fi ...

  2. C语言共用体(C语言union用法)详解

    转载重点:共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员.图形分析影响过程 通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语 ...

  3. 第十章 结构体_C语言共用体(C语言union用法)详解

    通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:  un ...

  4. c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别

    共用体与结构体的区别 共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度. 共用体的地址和内部各成员变量的地址都是同一个地址 结构体大小: 结构体内部的成员,大小等于最后一个成 ...

  5. 【 C 】联合(union)或共用体(union)

    单单从union的字母意思上翻译的话,联合是最容易让人想到的,但是这往往会让人产生疑惑?所以感觉这个中文翻译并不好,反而是共用体(union)能体现出这种类型的含义. 下面转载一篇介绍共用体的文章,写 ...

  6. c语言联合有什么作用,C语言union共用体(联合体)基础知识及实际用途

    union我想应该不是为了省内存而创建的吧!能省多少内存呢? 我猜测是:一个空间可以同时使用多种类型,而不必在意数据类型,因为我们可以通过里面的数值判断数据类型.(可参考动态语言Lua/Python) ...

  7. C语言union合并两个字节,C语言中的联合体union所占内存方式

    当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: 2)它的所有成员 ...

  8. c语言共用体类型变量在程序执行期间,2003年10月甘肃省高等教育自学考试C语言程序设计试卷...

    一.单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其代码填入题干后的括号内.每小题1分,共20分) 1.程序中定义以下宏 #define S(a,b) a*b 若定义 int area ...

  9. C语言 结构体 联合体 | 嵌套使用

    一.简单的实例分析 题目:获取0x12345678各个字节. 答案: //方法一: #include <stdio.h>typedef unsigned int uint32_t; typ ...

最新文章

  1. 关于年长程序员的5个误传
  2. SAP HUM嵌套HU场景里是否可以直接对内层HU执行VLMOVE?
  3. 灯泡亮度控制单片机_如何延长投影机灯泡使用寿命 延长投影机灯泡使用寿命方法【介绍】...
  4. bert中的sep_基于向量的深层语义相似文本召回?你需要BERT和Faiss
  5. python dataframe删除指定行_pandas.DataFrame删除/选取含有特定数值的行或列
  6. [USACO4.2]工序安排Job Processing
  7. 图解算法学习笔记(五):散列表
  8. [分布式训练] 单机多卡的正确打开方式:PyTorch
  9. python需要花钱下载吗_用Python下载知乎视频,非常实用
  10. Oracle Merge into
  11. 最新楚琳web打印控件下载 - 2019适配所有浏览器
  12. linux查看内存是ddr3,linux查看具体内存信息
  13. xml文件怎么转换成wps_word文档怎样转换成xml 怎么将XML文档转成WORD文档
  14. 电脑连接热点无internet访问权限_Win10连接wifi后显示无internet访问权限如何解决...
  15. python-json校验-jsonpath
  16. python打开网址搜索关键字_Python实验:百度搜索关键字自动打开相关URL
  17. 求佩波拉切数列的前20项
  18. bundle包是什么意思_【Xcode小技巧】生成Bundle包
  19. 最近迷上旅游。。。收藏并学习一个旅游网站
  20. Docker错误Loaded: bad-setting (Reason: Unit docker.service has a bad unit file setting.) docker.servic

热门文章

  1. linux下grpc安装编译,linux下安装grpc插件 (c++和go语言)
  2. 【转】在windows上安装VTK
  3. 【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
  4. 第十一节:基于MVC5+Spring.Net+EF+Log4net 传统的一种搭建模式
  5. 一步步编写操作系统 10 cpu的实模式
  6. 实现二分归并排序算法_如何实现归并排序?
  7. centos7安装flink集群_《从0到1学习Flink》—— Flink 写入数据到 Kafka
  8. 提供写入的数据少于指定的数据_指定范围数据的汇总
  9. Python 数据分析三剑客之 Pandas(七):合并数据集
  10. 【LeetCode - 227】基本计算器 II(栈)