C语言中Union类型的使用方法

转自:http://blog.csdn.net/feimor/article/details/6858103

使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型,各字段共享一块内存,实际应用中却不知道它的具体用途。

今天读《编程卓越之道》中看到有对其使用的简单介绍,记录在此:

首先摘录一下struct和union的重要区别:

    struct为每个字段在不同的偏移处分配存储空间,而联合则将所有的字段重叠在内存中的相同偏移处。

联合类型的用途:

             1、创建别名。别名是内存对象原名之外的其他名字。比如在程序中经常会用到将一个数据类型强制转换为另一个类型,这个操作可以使用联合来代替。

比如typedef union{

char c;

uint32 u;

}CharOfUnion v;

可以通过v.u来操作一个uint32类型的对象,当需要将uint32变量的低端字节看做一个字符的时候,只需要访问v.c就可以了。

实际应用中,大多数的协议结构定义中,都会使用union类型来定义。

 

2、使用联合来将较大的对象分解成组成这个对象的各个字节。(尤其在单片机编程中将float拆解成char

typedef union{

uint u;

char bytes[4];

}asBytes composite;

可以使用composite.bytes数组来访问composite.u字段的各个字节。

转自:http://blog.163.com/yx_xie2007/blog/static/1024642532011101411940162/

一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。
一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。

1、union中可以定义多个成员,union的大小由最大的成员的大小决定。 
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。 
3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)

4、联合体union的存放顺序是所有成员都从低地址开始存放的。
下面看一个简单的代码:

 #include <stdio.h>
 
typedef union{
 char c;
 int a;
 int b;
}Demo;
 
int main(int argc, char **argv)
{
 Demo d;
 d.c = 'H';
 d.a = 10;
 d.b = 12;
 
 printf("size: %d\n", sizeof(d));
 printf("%c\t%d\t%d\n", d.c, d.a, d.b);
 
 return 0;
}

(转)C语言union(联合体 共用体) - 潜流 - pig在学习思考了

原创文章,转载请注明:
本文出自程序人生 >> C语言union(联合体 共用体)

ps:红色字体部分为本人添加。

转载于:https://www.cnblogs.com/shirishiqi/p/5416935.html

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

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

相关文章

android 点对点语音,使用Android SIP Stack进行点对点SIP呼叫?

我一直被困在同样的问题上.如果你可以在没有android sip api的情况下制作它,你可以查看rtp api,它为你提供了一些较低级别的工具来制作P2P VOIP应用程序,而无需服务器.To support audio conferencing and similar usages, you need toinstantiate two classes as endpoints for…

拓扑排序

用两种方式来实现 1、 深度优先搜索&#xff08;DFS&#xff09; 对有向图采取深度优先搜索&#xff0c;并且在postVist处&#xff0c;打印所访问的节点。最后打印出的字符序列的反序列正好满足拓扑排序。&#xff08;可以在postVist&#xff08;&#xff09;方法中&#xff0c…

阿里启动NASA计划创造新经济核心科技

本文讲的是阿里启动"NASA"计划创造新经济核心科技【IT168 资讯】2017年3月9日&#xff0c;阿里巴巴集团在杭州召开首届技术大会&#xff0c;动员全球两万多名科学家和工程师投身“新技术战略”。会议透露&#xff0c;阿里巴巴正在启动一项代号“NASA”的计划&#xf…

ORACLE创建表空间和用户

--表空间 CREATE TABLESPACE sdt DATAFILE F:\tablespace\demo size 800M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --索引表空间 CREATE TABLESPACE sdt_Index DATAFILE F:\tablespace\demo size 512M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AU…

PHP-CGI, FastCGI, PHP-FPM的关系和区别

Web server(apache, nginx) 接受到一个php请求后要解析php文件, 怎么解析呢, web server是C语言写的, 所以需要一个协议, 一个php解释器, 也就是CGI. FastCGI是用来提高CGI性能的, 可以说是CGI的升级版. CGI每当一个请求过来都要开启一个进程, 访问结束再关闭一个进程, 太累. F…

android 6关闭防火墙,安卓手机如何关闭防火墙

我的安卓手机不想使用防火墙了!该如何关闭呢?下面由小编给你做出详细的安卓手机关闭防火墙介绍!希望对你有帮助!安卓手机关闭防火墙方法一1、如果该防火墙不是系统自带的&#xff0c;是你下载安装的&#xff0c;就直接在设置选项中&#xff0c;选择应用程序--管理应用程序&…

Powershell命令中的 CommonParameters是指什么

因为在命令中经常遇到这个参数&#xff0c;后来找了一下&#xff0c;有一个微软的官方文档&#xff0c;就不翻译了&#xff0c;英文好的自己读吧。https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_commonparameters?viewpowershel…

java日志之slf4j与logback简单使用

最近在开发遇到日志是使用slf4j与logback.xml的配置&#xff0c;所以就记录下来了。 1、导入这几个jar包&#xff1a; Logback 分为三个模块&#xff1a;logback-core&#xff0c;logback-classic&#xff0c;logback-access logback-core 是核心&#xff1b; logback-classic …

android one x3怎么样,618旗舰手机怎么选,看完这篇文章,你就会知道

转眼间&#xff0c;2021年即将过半&#xff0c;一年一度的年中购物狂欢节618就要到来了。我已经迫不及待了。毕竟在618年中大促的时候&#xff0c;各家厂商都有力度非常大的活动。而且也有很多小伙伴一直在观望&#xff0c;想要在618的时候给自己换一款手机。说实话&#xff0c…

字符设备驱动程序框架

via&#xff1a;http://blog.chinaunix.net/uid-20672257-id-3142809.html 1、写出open、write函数 2、告诉内核 1&#xff09;、定义一个struct file_operations结构并填充好 static struct file_operations first_drv_fops {.owner THIS_MODULE, /* 这是一个宏&…

华为鸿蒙与magic,如果荣耀Magic3搭载了屏下镜头和鸿蒙系统,你会做第一批吗?...

华为荣耀在目前的手机市场中&#xff0c;荣耀手机的人气还是蛮高的&#xff0c;从高端旗舰市场到中低端市场&#xff0c;我们都能够看到荣耀手机的踪影&#xff0c;这已经可以代表荣耀手机的优势了。要知道华为荣耀这两年的发展速度非常快&#xff0c;产品的布局速度也是如此&a…

第十九章 我国农村资金筹集

农村改革解说&#xff08;专著&#xff09;第十九章 第十九章 我国农村资金筹集 1、农村公共事业统筹经费怎样确定&#xff1f; 总的原则是&#xff1a;制止对农民的不合理摊派&#xff0c;减轻农民的额外负担&#xff0c;保证农村合理的公共事业经费。具体要求如下&#xff1a…

两个Python web框架:Django Tornado比较

就是说它作为 web 框架比 Django 简单&#xff0c;又支援异步 IO&#xff0c;且更不需要前端的 webserver ? 我已经混乱了&#xff0c; Tornado是 Nginx、Django、Node.js 的结合体&#xff1f;又或是 Nginx * 20% Django * 40% Node.js * 40% &#xff1f;你需要搞清楚几个…

广义动量定理之速度V的应用分析

广义动量定理之速度V的应用分析 从广义动量定理FαtnmV的角度说&#xff0c;改变速度V&#xff0c;就可以改变成果nmV。速度派以改变速度V作为其主要目的。 速度V应用于兵贵神速 理论简介&#xff1a;三国时期曹操的谋士郭嘉说&#xff1a;“兵贵神速”。 孙子在九地篇中说“兵…

云安全联盟发布更新版安全应用指南

本文讲的是云安全联盟发布更新版安全应用指南【IT168 资讯】云安全联盟(CSA)本周四发布了云计算服务的第二版安全应用指南。这一非营利性质的联盟正式成立于四月份&#xff0c;其目的是推进云计算安全的最佳实践。他们在2009 RSA会议(全球信息安全领域最具权威的年度峰会)上发布…

[BZOJ1026] [SCOI2009] windy数 (数位dp)

Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道&#xff0c;在A和B之间&#xff0c;包括A和B&#xff0c;总共有多少个windy数&#xff1f; Input 包含两个整数&#xff0c;A B。 Output 一个整数 Sample Input…

JQuery ajax()实例

前端页面&#xff1a; <!doctype html><html><head><meta charset"utf-8"><title>搜索</title></head> <body><div class"zgz">请输入(A-Z):<input type"text" value"GET"&…

黑马数据库html阶段考试,黑马web阶段web试题学生版.docx

Web 阶段 Web 试题1. 动态网站的开发技术有 (A)JSPHTMLCSSJavaScript 下面哪个请求头信息可以实现防盗链 (C)LocationRefreshRefererIf-Modified-Since在Web应用程序的文件与目录结构中&#xff0c;是放置在(A )WEB-INF 目录conf 目录lib 目录classes 目录下面哪一个指明向客户…

学生信息管理系统中遇到的问题解析

项目概述&#xff1a;做一个简单的学生信息管理系统 要求&#xff1a;学生信息的增删查改&#xff0c;成绩的增删。自动生成的编号。 工具&#xff1a;微软企业库与MiniUI 遇到的问题与解决方法&#xff1a;&#xff08;前面的博文也有类似的问题和解决方法&#xff0c;这里不再…

简单地使用线程之一:使用异步编程模型

.NetFramework的异步编程模型从本质上来说是使用线程池来完成异步的任务&#xff0c;异步委托、HttpWebRequest等都使用了异步模型。 这里我们使用异步委托来说明异步编程模型。 首先&#xff0c;我们来明确一下&#xff0c;对于多线程来说&#xff0c;我们需要关注哪些问题。 …