1、共用体
共用体由若干个数据类型组合而成。和结构体型不同的是,共用体数据中所有成员都占用相同的内存单元,设置这种数据类型的主要目的就是节省内存空间。
union 共用体名
{
数据类型1 成员名1;
数据类型2 成员名2;
…
数据类型n 成员名n;
}共用体变量名;
例如
union da
{
int i;
char ch;
float f;
}a,b,c;
也可以将类型声明与变量定义分开:
union
{
int i;
char ch;
float f;
}a,b,c;
当然,也可以直接定义共用体变量:
union da
{
int i;
char ch;
float f;
}a,b,c;
注意:
(1)同一内段可以用来存放几种不同类型的成员,但每一瞬时只有一个成员起作用。
(2)共用体变量中前一次起作用的成员在存入新的成员后原有的成员失去意义。
(3)共用体变量和它的所有成员的地址都是同一地址。
(4)不同对共用体变量赋值,也不能在定义共用体变量时对其初始化。
2、枚举
1)枚举型定义的一般语法形式为:
enum 枚举名 {
标识符[=整形常数],
标识符[=整形常数],
...
标识符[=整形常数],}
例如,如下代码声明了一个举枚类型weekday:
enum weekday{mon, tue,wed, thu,fri,sat,sum};
随后,我们就可以用这个举枚类型来定义变量,如:
enum weekday workday,weekend;
C语言也允许在声明枚举类型同时定义枚举变量,如:
enum weekday{mon, tue,wed, thu,fri,sat,sum} workday,weekend;
这样变量workday,weekend就具有weekday举枚类型,其取值只能是mon, tue,wed, thu,fri,sat,sum
这几个值。
(2)赋初值
在给枚举常量赋初值时,如果给其中任何一个枚举常量赋初值,则后面的枚举常量将按自然数的规则依次赋初值,例如:
enum weekday{ sun,mon,tue,wed=6,thu,fri,sat };
上面的例子只给枚举常量wed赋了初值,在这种情况下,每个枚举常量的初值分别如下:sun的值为0,mon的值为1,tue的值为2,wed的值为6,thu的值为7,fri值为8,sat值为9。
注意:
1 枚举中每个成员(标识符)结束符是“,”,不是“;”,最后一个成员可省略“,”。
2 初始化时可以赋负数,以后的枚举元素一次加1.
3 枚举变量只能取枚举说明结构中的某个枚举元素。