1.共用体中的所有成员,共享一片内存空间,成员的首地址都相同
2.共用体的大小,取决于共用体中成员大小更大的那个
3.一个成员的数据发生修改,另一个会跟着修改
把定义结构体时的struct改成union即可
访问共用体成员与访问结构体成员类似。 变量用.访问,指针用->访问
- union A
- {
- int a;
- char c;
- }; //声明共用体类型
- union A a1; //定义了一个共用体变量
小端存储:地址低位存数据低位 (常见的计算机都是小端存储)
大端存储:地址地位存数据高位 (网络通信的数据包一般是大字节序)
- #include
- union A
- {
- char t1;
- int t2;
- };
- int main(int argc, const char *argv[])
- {
- union A a1; //栈区
- a1.t2 = 0x12345678; //0x12数据高位 0x78数据低位
- printf("%#X\n",a1.t1); //访问共用体中的地址低位
- printf("%p\n",&a1.t1);
- printf("%p\n",&a1.t1+3);
- return 0;
- }
- #include
- int main(int argc, const char *argv[])
- {
- int a = 0x12345678;
- char *p = &a; //为了只取a的低地址的数据
-
- if(*p==0x78)
- {
- printf("小端\n");
- }
- else
- {
- printf("大端\n");
- }
-
- return 0;
- }

- enum 枚举名
- {
- 枚举项1,
- 枚举项2,
- 枚举项3,
- ···
- 枚举项n,
- }; --->使用enum 枚举名 定义变量
-
- typedef enum 枚举名
- {
- 枚举项1,
- 枚举项2,
- 枚举项3,
- ···
- 枚举项n,
- }新的枚举名; ---->使用新的枚举名定义变量
- #include
- enum week
- {
- Sun,
- Mon,
- Tue,
- Wed=6,
- Thu,
- Fri,
- Sat,
- };
- int main(int argc, const char *argv[])
- {
- int a = Sun;
- //Sun = 90; 枚举项不能被赋值
- printf("%d\n",a);
- printf("%d\n",Mon);
- printf("%d\n",Tue);
- printf("%d\n",Sat);
- return 0;
- }
- #include
- enum week
- {
- Sun,
- Mon,
- Tue,
- Wed,
- Thu,
- Fri,
- Sat,
- };
- void week_p(enum week p)
- {
- switch(p)
- {
- case Sun:
- printf("p是星期天\n");
- break;
- case Sat:
- printf("p是星期六\n");
- break;
- case Mon:
- printf("p是星期一\n");
- break;
- }
- }
- int main(int argc, const char *argv[])
- {
- week_p(Mon);
- return 0;
- }
- #include
- #include
- enum LED{
- LED_1,
- LED_2,
- LED_3,
- };
- enum LED_CON{
- LED_ON,
- LED_OFF,
- };
- void inint(enum LED L){
- switch(L){
- case LED_1:
- printf("LED_1初始化成功\n");
- break;
- case LED_2:
- printf("LED_2初始化成功\n");
- break;
- case LED_3:
- printf("LED_3初始化成功\n");
- break;
-
- }
- }
- void con(enum LED L,enum LED_CON C){
- switch(L){
- case LED_1:
- switch(C){
- case LED_ON:
- printf("LED_1 打开\n");
- break;
- case LED_OFF:
- printf("LED_1 关闭\n");
- break;
- }
- break;
- case LED_2:
- switch(C){
- case LED_ON:
- printf("LED_2 打开\n");
- break;
- case LED_OFF:
- printf("LED_2 关闭\n");
- break;
- }
- break;
- case LED_3:
- switch(C){
- case LED_ON:
- printf("LED_3 打开\n");
- break;
- case LED_OFF:
- printf("LED_3 关闭\n");
- break;
- }
- break;
- }
- if(L==LED_1 && C==LED_ON) //这里的LED_1不写成L==“LED_1”
- printf("LED_1 打开\n");
- if(L==0 && C==0)
- printf("LED_1 打开\n");
- //这里的LED_1就相当于一个宏定义
- //define LED_1 0
-
-
-
- }
- int main(int argc, const char *argv[])
- {
- init(LED_1);
- con(LED_1,LED_ON);
- init(LED_2);
- con(LED_2,LED_OFF);
- init(LED_3);
- con(LED_3,LED_ON);
- return 0;
- }
//这里的LED_1就相当于一个宏定义
//define LED_1 0