[C/C++不常见语法特性]_[C语言里的共用体说明]
2013-04-27 23:34
363 查看
1.一般情况下,对于数据存储或者接口导出,使用的都是结构体,因为现在的电脑配置都很高,不在乎公用内存,但是对内存要求苛刻的情况下union是一个比较好的选择.
2.当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。
在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。
windows sdk里用共用体的例子 winnt.h:
原来 DUMMYSTRUCTNAME 就是一个空的宏,想了半天为什么要定义两个重复的struct,一个是直接用LowPart,HgithPart,一个是通过成员引用u.LowPart,u.HighPart,两种都可以。
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,两种都可以。
相关文章推荐
- [C/C++不常见语法特性]_[C语言里的共用体说明]
- [C/C++不常见语法特性]_[使用dynamic_cast 强制转换的优点]
- [C/C++不常见语法特性]_[使用dynamic_cast 强制转换的优点]
- [C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]
- [C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]
- [C/C++不常见语法特性]_[位域的使用细节]
- [C/C++不常见语法特性]_[位域的使用细节]
- [C/C++不常见语法特性]_[模板编译模式]
- [C/C++不常见语法特性]_[强制显式调用构造函数explicit]
- [C/C++不常见语法特性]_[模板编译模式]
- [C/C++不常见语法特性]_[强制显式调用构造函数explicit]
- 改善C++程序的建议:语法篇1<从C继承而来的特性>
- javascript对象和c++对象的区别-----坑爹的js,痛苦的语法特性,使用方法
- C++ Map常见用法说明
- C/C++常见笔试面试题(二)——软件特性、fseek()函数、逗号运算符、左值和右值
- C++开发者快速学习Objective-C语言核心语法
- Lua脚本语法说明(增加lua5.1部份特性)
- C++对C语言的非面向对象特性扩充(2)
- C语言实现C++中面向对象特性
- Visual C++ 编译器自动假定带 .C 扩展名的文件是 C 文件而不是 C++ 文件,并且拒绝 C++ 语法和关键字(c语言只能在大括号最前面申明变量)