您的位置:首页 > 编程语言 > C语言/C++

[C/C++不常见语法特性]_[C语言里的共用体说明]

2013-04-27 23:34 363 查看
1.一般情况下,对于数据存储或者接口导出,使用的都是结构体,因为现在的电脑配置都很高,不在乎公用内存,但是对内存要求苛刻的情况下union是一个比较好的选择.

2.当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。

union foo 
{ 
char s[10]; 
int i; 
};


在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。

windows sdk里用共用体的例子 winnt.h:

typedef union _LARGE_INTEGER {
  struct {
    DWORD LowPart;
    LONG  HighPart;
  } DUMMYSTRUCTNAME;
  struct {
    DWORD LowPart;
    LONG  HighPart;
  } u;
  LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;


原来 DUMMYSTRUCTNAME 就是一个空的宏,想了半天为什么要定义两个重复的struct,一个是直接用LowPart,HgithPart,一个是通过成员引用u.LowPart,u.HighPart,两种都可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: