共用体
共用体和结构体类似,也是一种构造类型的数据结构,把struct换成union就可以了
特征:所有成员公用内存空间
#include <stdio.h>
#include <string.h>
void test_union(void)
{
// struct stu_info//结构体定义基本方式
// {
// int id;
// char name[20];
// }stu01;
// struct stu_info stu02;
//
// typedef struct//声明结构体
// {
// int id;
// char name[20];
// }Stu;
//
// Stu stu01;
union stu_tech//共用体定义基本方式
{
int id;
char name[18];
}var_01;//特征:所有成员公用内存空间
union stu_tech var_02;
printf("union stu_tech的空间大小:%d\n",sizeof(var_01)); //单位也是以最大类型
printf("union 类型的var_01地址%#p\n",&var_01);
printf("union 类型的var_01.id地址%#p\n",&var_01.id);
printf("union 类型的var_01.name地址%#p\n",&var_01.name);
var_01.id=1002;
printf("var.id=%d\n",var_01.id);
strcpy(var_01.name,"超级大坏坏");
printf("var.id=%d\n",var_01.id);
printf("var.name=%s\n",var_01.name);
}
void test_daxiaoduan(void)
{
union
{
char ch;
int i;
}stt;
stt.i=0x123456;
char *p=&stt;
printf("p指向stt的地址%#p\n",p);
printf("p指向stt的地址的内容为%x\n",*p);
printf("p指向stt的地址%#p\n",p+1);
printf("p指向stt的地址的内容为%x\n",*(p+1));
// if(stt.ch==1)
// printf("小端模式\n");
// else
// printf("大端模式\n");
}
int main()
{
test_union();
test_daxiaoduan();
return 0;
}
结果
union stu_tech的空间大小:20
union 类型的var_01地址0X000000000062FDD0
union 类型的var_01.id地址0X000000000062FDD0
union 类型的var_01.name地址0X000000000062FDD0
var.id=1002
var.id=-1229149005
var.name=超级大坏坏
p指向stt的地址0X000000000062FDE0
p指向stt的地址的内容为56
p指向stt的地址0X000000000062FDE1
p指向stt的地址的内容为34
--------------------------------
Process exited after 0.06667 seconds with return value 0
请按任意键继续. . .
枚举
#include <stdio.h>
void test_enum(void)
{
enum week//声明枚举类型
{
mon=1,//单独赋值,修改基准
tue,
wed,
thu=12,//单独赋值,修改后面的基准
fir,
sat,
sun
};
enum week workday,weekday;//定义变量
workday=sun;//引用
printf("workday=%d\n",workday);
if(workday==mon)
printf("是周一\n");
}
int main()
{
test_enum();
return 0;
}
结果
workday=15
--------------------------------
Process exited after 0.03306 seconds with return value 0
请按任意键继续. . .