目录
一、联合
1、联合的定义与声明
联合也是一种新的数据类型,是一种特殊形式的变量。联合体也称共用体,其关键字为union。声明与定义与结构相似,如:
Union 联合名
{
数据类型 成员名;
数据类型 成员名;
……
}联合变量名;
例如:
union a_bc
{
int I;
char mm;
};
union a_bc num;
其中联合名可以省略。
例如:
union
{
int I;
char mm;
} num;
2、联合的访问
联合的访问与结构相同,都是用点号(.)运算符。
联合变量也可以定义成数组或指针,当定义为指针时,也用 -> 符号访问。
联合既可以出现在结构体内,它的成员也可以是结构体,例如:
struct
{
int age;
union
{
int I;
char *ch;
}x;
}y[10];
访问i可以写成:
y[1].x.i;
若要访问指针ch,则:
*y[2].x.ch;
写为:y[2].x.*ch;是错的。
3、联合与结构的区别
1、两者都是由多个不同数据类型的成员组成,但在任何同一时刻,联合中只存放一个被选中的成员,而结构里的成员都在;
2、对于联合的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于结构,各成员互不影响。
总的来说联合体的所有成员共享同一个内存地址。
例:
打印联合体所有成员的地址,同时打印各成员的值;发现地址是相同的,但成员的值只有最后一个是正确的。因此联合体的成员不能同时出现,同一时刻只能使用一个。
二、枚举
1、枚举声明及定义
如果一个变量只有几种可能的值,那么就可以将其定义为枚举类型。
枚举的声明格式:(关键字enum)
enum 枚举类型名称
{
枚举值名称,
枚举值名称,
……
};
枚举成员是枚举变量可取的值,注意用逗号(,)隔开,不是分号,最后一个可省略。
枚举变量的定义也与结构、联合类似。
可在声明的同时定义,也可单独定义,如:
enum Num x;
定义枚举变量x。枚举变量只能取枚举成员中的某个值。
2、枚举初始化
如果不对枚举初始化,那么从第一个枚举值开始,顺次赋给枚举值0、1、2、3……。但当给枚举中的某个成员赋值时,其后的成员按依次加1的规则确定其值。
如:
enum Num
{
x1,
x2=0,
x3=20,
x4
}x;
此时x1=0,x2=0,x3=20,x4=21。
初始化时也可以赋负数。