首先看看union,在c++中,union可能没有多大用处,在c语言中,可能我们要借助其完成很多巧妙的设计,下面是其一个完整的定义:

union UTest         {              double dlOne;              char   chOne;              byte   bArray[4];         };

好了,看到上面的定义,很像struct的定义,但是对于union来说,有几点是值得注意的:不能直接对其进行初始化;某个时候只能使用其中的一个元素;最后一点也是最重要的一点就是内存共享,分配给union内存的Size是其中Size最大的那个元素的Size。说到这里,既然union最重要的是内存共享,那么我们做如下定义:union UTest tEle;然后赋值:tEle.dlOne = 2.0f;现在是dlOne可用,下一步:tEle.chOne = 'A';到这里dlOne失去了其意义,chOne变得可用。

然后,我们再来看看Struct,在struct中每一个元素都是分配内存的,而且都是有单独意义的,也就是说对一个变量的赋值并不影响其它变量的取值。到这里,各位应该明白这两者之间的区别了吧,事实上我个人认为,它们最主要的区别是在内存的分配和使用上。知道这一点,一切也就不难理解了。

最后,在使用union的时候,可能有时候我们会来用其来对字节流进行分解和重组,这样使用的时候一定要注意各种内存对数据的存储,比如Intel是按高高低低的原则存储的,有些则是相反的。因此,这点因该值得注意,否则得到的可能和预期的结果不一样。

union和struct的区别之处,在于内存的共享上的更多相关文章

  1. C语言union关键字,union和struct区别

    union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间 ...

  2. 转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题

    SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UN ...

  3. typedef struct与struct的区别

    typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据 ...

  4. class、interface、struct的区别

    1 struct和class有什么区别 1.1默认的继承访问权限 Struct是public的,class是private的. 你可以写如下的代码: struct A { char a; }; str ...

  5. 用union 和 struct 位域操作

    很久没有用C 语言中的 union 和 struct 位域操作了. 最近用了一下(当然,我承认是从stackoverflow 上抄的) 需求是这样的,已知一个 LPARAM 整数 3866625 ,求 ...

  6. .NET中class和struct的区别

    1.引言 提起class和struct,我们首先的感觉是语法几乎相同,待遇却天壤之别.历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行.在我认为,struct ...

  7. (转载)struct 与typdef struct的区别

    (转载)http://blog.csdn.net/piratejk/article/details/3491226 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字. ...

  8. struct和typedef struct的区别

    当typedef与结构结合使用时,会有一些比较复杂的情况,而且在C语言和C++里面有略有差别,因此从网上摘录了一些资料. 1 首先:      在C中定义一个结构体类型要用typedef:       ...

  9. C++学习13 类class和结构体struct的区别

    C++保留了C语言的 struct,并且加以扩充.在C语言中,struct 只能包含数据成员,不能包含成员函数.而在C++中,struct 类似于 class,既可以包含数据成员,又可以包含成员函数. ...

随机推荐

  1. DesiredCapabilities内容详解--Appium服务关键字

    上次了解了一些DesiredCapabilities的用法,有些还是不太清楚,去appium官网找了找官方文档,觉得写的很全: ## Appium 服务关键字 <expand_table> ...

  2. 钉钉jsapi免登获取code中,出现对应企业没有某域名微应用

    在使用jsapi中.出现 {"errorMessage":"对应企业没有某域名微应用",:"errorCode":"3" ...

  3. apache htaccess 一个 例子

    <Files ~ "^.(htaccess|htpasswd)$"> deny from all </Files> DirectoryIndex index ...

  4. Django之auth模块(用户认证)登陆组件

    auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...

  5. 2.centos7 安装Mesos和marathon

    master节点 节点名称 IP地址 master1 192.168.161.128 由于硬件资源有限,这里仅安装一个master节点,会存在单点问题.在实际生产中,尽量不要这样操作. 1.安装zoo ...

  6. Should I buy Auro OtoSys IM600 or Obdstar X300 DP?

    Auro OtoSys IM600 and Obdstar X300 DP – What’s the difference & Which better? This is for those ...

  7. 虚拟机 ----最小安装无法使用vim编辑器

    解决办法:安装 yum -y install vim-enhanced.x86_64 帮助网址http://blog.csdn.net/yexudengzhidao/article/details/7 ...

  8. maya2014无法安装卸载激活失败

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  9. maya2018无法安装卸载激活失败

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  10. [转]jquery插件创建 jquery.fn.extend与jquery.extend

    本文转自:http://www.cnblogs.com/wyjgreat/archive/2011/07/19/2110754.html jQuery为开发插件提拱了两个方法,分别是: JavaScr ...