2009年4月19日星期日

C语言中enum、struct、union

enmu:

在C语言中有一种对软件工程来讲,可以大大提高程序可读性的数据类型,那就是枚举(enum)。一般的定义方式如下:
enum enum_type_name{
ENUM_CONST_1,
ENUM_CONST_2,
...
ENUM_CONST_n
} enum_variable_name;
enum_type_name 是自定义的一种数据数据类型,而enum_variable_name为enum_type_name类型的一个变量。实际上 enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型的变量 enum_variable_name只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。

实际上在此定义了一组常量:ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些常量可以用来给任何一种类型的数据赋值,在这种意义下与#define定义的常量几乎没有区别。
enum变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0开始依次递增1。如分别用一个常数表示不同颜色
typedef enum{
GREEN = 1,
RED,
BLUE,
GREEN_RED = 10,
GREEN_BLUE
}Color.
其中各常量名代表的数值分别为:
GREEN = 1
RED = 2
BLUE = 3
GREEN_RED = 10
GREEN_BLUE = 11

struct and union:

union共用体
构造数据类型,也叫联合体
用途:使几个不同类型的变量共占一段内存(相互覆盖)

struct结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数据类型

---------------------------------------------------------------


结构体变量所占内存长度是各成员占的内存长度的总和。


共同体变量所占内存长度是各最长的成员占的内存长度。


共同体每次只能存放哪个的一种!!

共同体变量中起作用的成员是尊后一次存放的成员,
在存入新的成员后原有的成员失去了作用!

---------------------------------------------------------------


Structure 与 Union主要有以下区别:

1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而 struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。 在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。

2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。

没有评论: