标签:需要 定义 一个 最小 and 赋值语句 定义变量 eof 改变
共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量
定义共用体类型得方法和结构体非常相似,把struct 改成union就可以
在进行某些算法得时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量间相互重叠
这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作"共用体"类型结构,共用体所有成员占有同一段地址空间
共用体的大小是其占内存长度最大的成员的大小
举例
typedef struct data{
short int i;
char ch;
float f;
}DATAL;
DATA temp1; 结构体变量temp1 最小占7个字节(不考虑字节对齐)
typedef union data{
short int i;
char ch;
float f;
}DATA;
DATA temp2; 共用体temp2占4个字节,即i、ch、f共用4个字节
printf("%d\n",sizeof(temp2));
printf("%p\n",&(temp2));
printf("%p\n",&(temp2.i));
printf("%p\n",&(temp2.ch));
printf("%p\n",&(temp2.f));
结果:temp2的大小为4个字节,下面几个地址都是相同的,证明了共用体各个成员占相同的内存单元
共用体的特点
同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用
共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有
共用体变量的地址和它的各成员的地址都是同一地址
共用体变量的初始化
union data a= {123};初始化共用体为第一个成员
举例
typedef union data{
unsigned char a;
unsigned int b;
} DATA;
int main(){
DATA temp;
temp.b = 0xff ff ff ff;
printf("temp.b =%x\n",temp.b);
temp.a = 0x0d;
pritnf("temp.a = %x\n",temp.a);
pritnf("temp.b =%x\n",temp.b);
}
结果 temp.b = ffffffff temp.a =d temp.b = ffffff0d
枚举
将变量的值一一列举出来,变量的值只限于列举出来的值的范围内
枚举类型也是个构造类型的,既然是构造类型的数据类型,就得先定义类型,再定义变量
枚举类型的定义方法
enum 枚举类型名{
枚举值列表:
};
在枚举值表中应列出所有可用值,也称为枚举元素
枚举变量仅能取枚举值所列元素
枚举变量的定义方法
enum 枚举类型名 枚举变量名;
举例
定义枚举类型 week
enum week //枚举类型
{
mon,tue,wed,thu,fri,sat,sun
};
enum week workday,weekday; //枚举变量
workday与weekday 只能取 sun.... sat中的一个
workday = mon;// 正确
workday = tue;//正确
workday = abc;// 错误,枚举值中没有abc
注意: 枚举值是常量。不能再程序中用赋值语句再对它赋值
列如 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 以此类推
注意: 在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表它的数值,在程序中,不能再次对枚举元素赋值,因为枚举元素是常量
标签:需要 定义 一个 最小 and 赋值语句 定义变量 eof 改变
原文地址:https://www.cnblogs.com/fengzi759/p/11618715.html