共用体,枚举,typedef
2015-10-06 20:36
302 查看
1.共用体
1.1:union定义
使几个不同类型的变量共占一段内存(相互覆盖)。形式1:
union data { int i; char ch; float f; }a,b;形式2:
union data { int i; char ch; float f; }; union data a,b,c,*p,d[3];形式3:
union { int i; char ch; float f; }a,b,c;注意项:
1:union中类型定义时不分配内存
2:union变量任何时刻只有一个成员存在
1.2:union变量的引用
共用体变量名.成员名=共用体指针名->成员名=(*共用体指针名).成员名引用规则:
1:不能引用共用体变量,只能引用其成员
2:共用体变量中起作用的成员是最后一次存放的成员
3:不能在定义共用体变量时初始化
4:可以用一个共用体变量为另一个变量赋值
1.3:union变量的初始化
与结构变量的初始化不同的是,只能对共用体变量列表中的一个变量进行初始化。例:union data d = {2.3};
1.4:union变量内存大小
原则上,共用体的大小取决于占据最多内存的成员的长度。但字节对齐准则3,“结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)”仍然成立。
字节对齐准则后边写。
1.5:结构体变量和共用体变量内存形式的不同
编译器会为结构体变量中的每个数据成员分配不同的地址空间,也就是说,结构体变量中的数据程序是并列关系,而编译器为共用体变量中的数据成员分配的是同一块内存,每个时刻只有一个数据成员有意义,从地址的角度来看两者的差异,形象地表明了这一点。如图:
2:枚举
2.1:枚举定义
C语言提供了关键字Enum定义枚举类型,基本格式为:enum枚举类型名{枚举常量1[=整型常数],枚举常量2[=整型常数],……};作为一条完整的C语句,不要忘记结尾的分号。
枚举类型的定义包括以下要素:
枚举类型名,有效的C语言标识符。
枚举表,即“{枚举常量1[=整型常数],枚举常量2[=整型常数],……}”部分,枚举表是枚举常量的集合,枚举表中每项后的“=整型常数”是给枚举常量赋初值,方括号代表赋初值的操作可以省略。
如果不给枚举常量赋初值,编译器会为每一个枚举常量赋一个不同的整型值,第一个为0,第二个为1,等等。当枚举表中某个常量赋值后,其后的成员则按依次加1的规则确定其值。
来看一个简单的例子:
enum day {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
枚举值可以比较大小,大小是按照整型常量的值来比较的。
3:typedef
3.1:typedef用法
功能:用自定义名字为已有数据类型命名类型定义简单形式: typedef type name;
说明:
1:typedef 与 define不同
define typedef
预编译时处理 编译时处理
简单字符置换 为已有类型命名
2:用tyoedef声明数组类型、指针类型,结构体类型、共用体类型、枚举类型等,使得编程更加方便。
3:当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typefef名称了。
4:使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。
相关文章推荐
- Hbase笔记五:Hbase和Hive
- C++之递归函数的参数传递问题
- UML类图几种关系的总结
- C++类模板实例
- split命令使用详解
- hdu4501(三维背包)
- [hiho]#1069 : 最近公共祖先·三 线段树|树转数组
- POJ 3254 Corn Fields (状压DP,轮廓线DP)
- 事件与事件处理程序
- 鞍点
- C#学习之多线程开发技术(二)
- 树——线段树
- Java实现双向链表
- PHP的错误异常信息是否输出
- iOS:多线程NSThread的详细使用
- TeX排版记录 多行长公式 括号 对齐 问题
- 解档与归档
- UI_UITableView编辑
- java的hashtable与hashMap 的讲解
- micro-template改造