共用体
一种构造类型的数据结构
共用体和结构体类似,也是一种构造类型的数据结构。
既然是构造类型的,就需要先定义出类型,然后用类型定义变量。
定义共用体类型的方法和结构体非常相似,把struct 改成union 就可以了。
在进行某些算法的时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量所使用空间相互重叠。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构。
共用体所有成员占有同一段地址空间。
共用体的大小是其占内存长度最大的成员的大小。
共用体的特点
- 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用。
- 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖。
- 共用体变量的地址和它的各成员的地址都是同一地址。
- 共用体变量的初始化
union data a={123};
初始化共用体为第一个成员。
#include <stdio.h>
//定义一个共用体
union un{
int a;
int b;
int c;
};
int main(int argc, char *argv[])
{
//定义共用体变量
union un myun;
myun.a = 100;
myun.b = 200;
myun.c = 300;
printf("a = %d, b = %d, c = %d\n", myun.a, myun.b, myun.c);
return 0;
}
执行结果
枚举
将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
枚举类型也是个构造类型的。
枚举类型的定义
enum 枚举类型名{
枚举值列表;
};
在枚举值表中应列出所有可用值,也称为枚举元素。
枚举变量仅能取枚举值所列元素。
枚举变量的定义方法
enum 枚举类型名 枚举变量名;
- 枚举值是常量,不能在程序中用赋值语句再对它赋值。
例如:sun=5; mon=2; sun=mon;
都是错误的。 - 枚举元素本身由系统定义了一个表示序号的数值。
默认是从0开始顺序定义为0,1,2…
如在week中,mon值为0,tue值为1, …,sun值为6。 - 可以改变枚举值的默认值:如
enum week //枚举类型
{
mon=3,
tue,
wed,
thu,
fri=4,
sat,
sun
};
mon=3 tue=4
,以此类推
fri=4
以此类推
注意:在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表元素从几开始编号
在程序中,不能再次对枚举元素赋值,因为枚举元素是常量。
#include <stdio.h>
//定义一个枚举类型
enum week
{
mon=8, tue, wed, thu=2, fri, sat, sun
};
int main(int argc, char *argv[])
{
//定义枚举类型的变量
enum week day = mon;
printf("day = %d\n", day);
day = fri;
printf("day = %d\n", day);
return 0;
}
执行结果