共用体,枚举,typedef

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类型就便于移植。















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值