联合体(共同体)
来源:互联网 发布:45打印软件 编辑:程序博客网 时间:2024/04/27 16:09
转载自:http://blog.csdn.net/haiou0/article/details/6903463
void test ()
{
union V {
struct X {
unsigned char s1:2; // :2 指 占两个字符? 是两个bit。若是int 占多少?
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf("%d\n", v.x.s3);
printf("%d\n", v.x.s2);
printf("%d\n", v.x.s1);
}
输出什么?怎样输出的? ————> 3 (回车) 1 (回车) 0 (回车)v是联合体(共用体)变量,共有两个元素x和c,都需要一个字节,它们分配于同一个地址。而x是结构体变量,共有三个元素s1、s2、s3,分别占2位、3位、3位。分配内存低字节在内存低地址,高字节在高地址。当有v.c=100(其二进制为01100100)时,v.c的二进制值在内存中存放为:低位在内存低地址,高位在高地址,各变量的关系及内存存储情况见图所示。其中x的成员s3为二进制的011,即十进制的3,所以输出结果为3。
你的这个属于位域问题哈!联合体中 x 和 c共用一个内存空间,这也是为什么联合体在某一时刻只能保存一个数据类型的值。100的二进制位 01100100。(高字节 -> 低字节)而一般的机器(一般PC的CPU)都是小端,也就是低字节在前,所以s3占3位位 011.输出结果为 3
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
共用体
构造数据类型,也叫联合体
用途:使几个不同类型的变量共占一段内存(相互覆盖)
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数据类型
---------------------------------------------------------------
结构体变量所占内存长度是各成员占的内存长度的总和。
共同体变量所占内存长度是各最长的成员(其中有结构体的话,则结构体总内存和为一个单位)占的内存长度。
共同体每次只能存放哪个的一种!!
共同体变量中起作用的成员是最后一次存放的成员,
在存入新的成员后原有的成员失去了作用!
---------------------------------------------------------------
Structure 与 Union主要有以下区别:
1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。
2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。
举一个例子:
例:
#include <stdio.h>
void main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, number.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
- 联合体(共同体)
- 联合体(共同体)union V{...}v;
- 联合体(共同体)union V{...}v;
- 联合体(共同体)union V{...}v;
- C——联合体(共同体)总结
- 共同体
- 结构体(struct)和联合体/共同体(union)的联系和区别——名企面试重难点
- 联合体
- 联合体。。。
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- Python
- Java 动态代理机制分析及扩展
- myeclipse添加使用hibernate框架详解
- EaselJS 事件
- 继续深入网络编程Socket
- 联合体(共同体)
- 常用html标签
- proxool的配置参数
- 多线程CountDownLatch和CyclicBarrier的区别 以及举例
- 找不到Project Facets+eclipse项目出现红叉
- iOS设备键盘的关闭和隐藏时机总结
- 【Android开发笔记】pulltorefresh实现下拉刷新和上拉加载更多
- 热敏电阻B值的计算方法
- java常用库日期操作类(2)