11.3.2 联合

和struct非常相似,我们还有另外一种东西叫做union.union的所有地方表面上看起来和st是完全一样的.但是它和st不一样的是,对于st来说,如果这个union是一个st,那么这么st有两个成员,这两个成员的值是截然分开的.他随时都可以使用其中的任何一个.但是对于union来说,实际上这两个成员它们占据了相同的内存空间.当然它如果有三个四个那也一样.它的任何这个成员变量所占据的空间只有一份.怎么使用啊,你用了我还能用吗.不能.你通过它的i填进去了一个值,这个值就填到那去了,你通过它的c填了一个值,那这个值就填到那儿去了.可是你再通过它的i填一个值的时候,就把前面c里面的那个值给冲掉了.那c还有值吗?还有值.t

其实对于union来说,我们经常用到union的一个场合是这个:

你看我们做了一个union.我们用到了上节课说到的typedef.我们说这里头有个int i,还有一个char的 数组.因为不同平台的int可能不一样,所以我们给了数组这样一个大小.main做的事情其实是通过给i赋值然后把char数组输出.

如果我们说i=1234,那么它就会往那片空间写下去,1234所代表的16进制数(一头雾水).ok,我们把这个数找出来.十进制的1234换算一下16进制,得到0x04D2.所以它的这四个字节里面一定放着04D2的某种形式.我们的这个输出格式意思是要以十六进制的格式输出,而且这就是一个字节,你别给我做扩展了.02是显示两个十六进制数字的这么一个方式,如果不到10(指的是16)的话要补个0.然后它会给我们输出怎样的一个结果呢?

等一下,好像跟我们看到的有点不一样?

也就是说,这个计算机告诉我们说,这里头放的不是我们想像的04D2,而是反过来放的.呃,看到这个结果是正常的,我相信你在你的计算机上,在你的操作系统,在你的平台上你不应该看到其他的结果.只有一种可能你看到其他的结果.我不相信你有机会接触到这样的机器.因为我们现在用的cpu是叫做x86的cpu,这件事情呢在计算机里头呢,我们叫做大小端.我们现在用的x86的cpu呢,是一种小端的机器.对于小端我们计算机有个术语叫做低位在前.就是一个数放进内存里头的时候,它要把低的东西放在前面.这件事情呃其实跟咱没什么关系(目前),我只是顺便在这里说,我们通常用union呢,这是一个非常常见的用union的场合,就是我可以通过这种方式得到一个整数内部的各个字节,double,float等同理.这是一个很有趣的工具.我们会有一些用处,比如说当我们要做文件操作的时候,当我们要把一个整数以二进制的形式写到一个文件里头去的时候,这就是我们可以用来做读写的一个中间的媒介.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值