一、联合体:
1、特点:
a.) union 关键字可以省略 (指定义联合体变量的时候可以省略关键字)
b.) 支持匿名联合
2、定义格式:
union 联合体名
{
//定义成员.
}; //";" 分号不能丢哦
3、使用(直接上代码)
void UnionFunEx()
{
union //匿名联合定义
{
int num;
char buf[4];
};
num = 0x12345678;
for (int i = 0 ; i < 4 ; ++i)
{
//cout<<"buf["<<i<<"] = "<<buf[i]<<endl;
//小端系统 低位字节保存低位数据
printf("%#x,[%p]\r\n",buf[i],&buf[i]);//前面输出值,后面输出所在内存地址(数组中4个元素的地址均一样)
}
//小端系统 低位字节保存低位数据
printf("%#x,%#x,%#x,%#x\r\n",buf[0],buf[1],buf[2],buf[3]); //输出0x78,0x56,0x34,0x12
cout<<"----------------------------------------"<<endl;
printf("[%p]\r\n",&num);
printf("[%p]\r\n",buf);
}
void UnionFun()
{
union { //匿名联合定义
int n;
char c[4];
};
n = 0x12345678;
printf("%x,%x,%x,%x\r\n",c[0],c[1],c[2],c[3]); //输出0x78,0x56,0x34,0x12
}
二、枚举
1、特点:
a.) enum 关键字是可以省略的(指当定义枚举变量时,关键enum可以省略)
b.) 枚举是一个独立的数据类型,C语言当中枚举最基本的就是整型 (这一点决定了,C语言和C++语言中使用枚举时完全不同)2、定义格式:
enum 枚举名称 {ONE,TWO,THREE,...}; //";" 分号不能丢
3、使用(直接上代码)
void EnumFunEx(){
enum DIRECTION{UP,DOWN,LEFT=10,RIGHT};
//DIRECTION dd = 66; //编译报错,类型不一致 .C++中不能将整型转换成枚举,因为在C++当中枚举是独立的数据类型。而枚举是可以转换成整数的。
DIRECTION dd = DOWN;
cout<<dd<<endl;
}
void EnumFun()
{
enum E{a,b,c,d};
int n = b; //枚举可以转换成整数
//E e = 10 ; //错误,整数不能给枚举赋值,只能用a,b,c,d赋值.
cout<<"n: "<<n<<endl;
}