初出茅庐的小李博客之C语言必备知识共用体

C语言必备知识共用体

共用体是一种构造数据类型,有时候也称之为联合体。
它的用途:
使几个不同类型的变量共占一段内存。

共用体举例

union 共用体名
{ 类型标识符    成员名;类型标识符    成员名;
};
union data    //共用体名字是data{   int i;    //整型数据char ch;  //字符型数据float f;  //浮点型数据};

共用体特点

共用体变量任何时刻只有一个成员存在
共用体变量定义分配内存的长度=最长成员所占字节数

验证一下

#include <stdio.h> //printf scanf fputcunion data    //共用体名字是data{   int i;    //整型数据char ch;  //字符型数据float f;  //浮点型数据};union data dddd; 
int main(void)
{printf("共用体内存是:%d\r\n",sizeof(dddd));//实际打印的是float所占内存大小printf("float内存是:%d\r\n",sizeof(float));//实际打印的是float所占内存大小 printf("int内存是%d\r\n",sizeof(int));printf("char内存是:%d\r\n",sizeof(char));return 0;
}

共用体变量里面内存的大小可以说跟float内存大小一样。也可以说是跟int大小一样,这里都是4个字节。

共用体变量的定义

//定义共用体的时候把变量写在共用体的后面 例如这里的a b都是共用体类型的变量名
union data 
{ int i;char ch;float f;
}a,b;//用共用体来定义 dddd就是共用体类型的变量名
union data dddd; //共用体指针定义
union data *p;//共用体数组定义
union data d[3];//省略类型名字的 共用体变量 a b c
union 
{ int i;char ch;float f;} a,b,c;

测试代码如下

union 
{ int i;char ch;float f;
} a,b,c;int main(void)
{printf("共用体内存是:%d\r\n",sizeof(a));//实际打印的是float所占内存大小printf("float内存是:%d\r\n",sizeof(float));//实际打印的是float所占内存大小 printf("int内存是%d\r\n",sizeof(int));printf("char内存是:%d\r\n",sizeof(char));return 0;
}

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

  • 共用体变量名.成员名
  • 共用体指针名->成员名
  • (*共用体指针名).成员名

跟结构体非常相似 变量访问用点、指针访问用箭头、星号可以把指针的内容取出。

dddd.i = 1;printf("dddd.i  = %d\r\n",dddd.i);dddd.ch = 'm';printf("dddd.ch = %c\r\n",dddd.ch);dddd.f = 1.3;printf("dddd.f  = %f\r\n",dddd.f);

注意:

  • 同一个内存段可以用来存放几种不同类型的成员,但在每 一瞬时只能存放其中一种,而不是同时存放几种。
  • 共用体变量中起作用的成员是最后一次存放的成员 只保留了1.3

在这里插入图片描述

  • 共用体变量和它的各成员的地址都是同一地址

在这里插入图片描述
至此,共用体的知识点简单说完了。

附上代码:

#include <stdio.h> //printf scanf fputcunion data    //共用体名字是data{   int i;    //整型数据char ch;  //字符型数据float f;  //浮点型数据};
union data dddd; union data *p; 
int main(void)
{dddd.i = 1;dddd.ch = 'm';dddd.f = 1.3;printf("dddd.i  = %d\r\n",dddd.i);printf("dddd.ch = %c\r\n",dddd.ch);printf("dddd.f  = %f\r\n",dddd.f);printf("i地址  = %p\r\n",&dddd.i);printf("ch地址 = %p\r\n",&dddd.ch);printf("f地址  = %p\r\n",&dddd.f);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217723.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题:17.电话号码的字母组合

leetcode原题网页 题目描述&#xff1a;给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路&#xff1a;使用vector&#x…

Guitar Pro软件8.0官方最新版本下载

Guitar Pro 8是一款由法国Arobas Music公司开发的吉他学习与MIDI音序制作辅助软件&#xff0c;它具有丰富的功能&#xff0c;包括吉他谱、六线谱、四线谱绘制、打印、查看、试听等方面&#xff0c;能够帮助音乐爱好者更方便地进行音乐学习和创作。Guitar Pro 8拥有独特的gtp格式…

遥遥领先!TinyEngine 低代码引擎更新升级!AI 已成功部署!

官网更新 1. 协议规范优化更新 协议规范交互优化&#xff0c;能够在一页里面自由切换&#xff0c;提高用户体验&#xff0c;后端SDK文档字段描述补齐&#xff0c;助力开发者自助进行服务端开发。 2.使用手册全新改版 去掉之前的学院课程&#xff0c;新设计新分类让结构一目了…

【cf 158 c】

给你一个整数数组 a1,a2,…,an ( )。在一次操作中&#xff0c;你可以选择一个整数 x ( )&#xff0c;并用 ⌊⌋ 替换 ai ( ⌊y⌋ 表示将 y 舍入为最接近的整数)。 来替换从 1 到 n 的所有 i。请注意&#xff0c;每次操作都会影响数组中的所有元素。打印使数组中所有元素相等所…

可验证随机函数(VRF)

文章目录 一、背景以及场景共识发展第一代 POW “以力取胜”第二代 POS/DPOS “民主投票”第三代 VRF “运气抽签” 二、可验证随机函数&#xff08;VRF&#xff09;快速开始1. VRF是什么?2. MD5 hash函数和VRF&#xff08;Verifiable Random Function&#xff09;区别3. VRF-…

【阿里云】图像识别 智能分类识别 项目开发(一)

语音模块和阿里云图像识别结合 环境准备 代码实现 编译运行 写个shell脚本用于杀死运行的进程 语音模块和阿里云图像识别结合 使用语音模块和摄像头在香橙派上做垃圾智能分类识别 语音控制摄像下载上传阿里云解析功能点实现 环境准备 将语音模块接在UART5的位置 在orange…

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…

4、LED闪烁

LED亮灭 使用STC-ISP软件的延时计算器自动生成延迟子函数 #include <REGX52.H> #include <INTRINS.H>//延迟函数 void Delay500ms() //12.000MHz {unsigned char i, j, k;//_nop_()需要导入<INTRINS.H>包_nop_();i 4;j 205;k 187;do{do{while (--k);}…

JVM类加载的过程和JVM垃圾回收机制

文章目录 一、JVM类加载的过程1.1类加载的基本流程1.1.1加载1.1.2验证1.1.3准备1.1.4解析1.1.5初始化 1.2双亲委派模型 二、JVM垃圾回收机制2.1找到垃圾2.1.1引用计数(比如Python&#xff0c;PHP中用到)2.1.2可达性分析(比如Java中用到) 2.2释放垃圾2.2.1标记清除2.2.2复制算法…

jetson NX部署Yolov8

一,事情起因,由于需要对无人机机载识别算法进行更新,所以需要对yolov8算法进行部署到边缘端。 二,环境安装 安装虚拟环境管理工具,这个根据个人喜好。 我们需要选择能够在ARM架构上运行的conda,这里我们选择conda-forge 下载地址 安装即可 剩下的就是和conda 创建虚拟…

Jensen不等式

如果是正数&#xff0c;并且它们的和等于1&#xff0c;f是凸函数&#xff0c;那么&#xff1a; 也可表述为&#xff1a; 即x期望的凸函数值小于等于x凸函数值的期望

5、LED流水灯

LED流水灯 思路&#xff1a;每次LED灯熄灭后&#xff0c;下一个LED灯亮 #include <REGX52.H> #include <INTRINS.H>void Delay500ms() //12.000MHz {unsigned char i, j, k;_nop_();i 4;j 205;k 187;do{do{while (--k);} while (--j);} while (--i); }void m…