赞
踩
1.产生及意义
2.类型描述
union 共用体名
{
数据类型 成员名1;
数据类型 成员名2;
...............;
};
3.嵌套类型
4.定义变量(变量 数组 指针) ,初始化及成员引用
成员引用: 变量名.成员名
指针名->成员名
5.占用内存大小
6.函数传参(值 地址)
7.位域
共用体定义与引用
#include<stdio.h> #include<stdlib.h> union test_un // 多个成员共用一块空间,根据里面最大的那个数据类型来分配占用的空间 { int i;//4 float f;//4 double d;//8 char ch;//1 }; int main() { union test_un a; union test_un *p = &a; union test_un = arr[3]; a.f = 345.678; p->f = 345.678; printf("%d\n",sizeof(a)); //printf("%f\n",a.f); //printf("%d\n",a.i); exit(0); }
嵌套定义和位域问题
#include<stdio.h> #include<stdlib.h> #include<stdint.h> struct { int i; char ch; union { int a; char c; }un; float f; };//结构体嵌套共用体 union { int a; double d; struct { int arr[10]; float f; }c; };//共用体嵌套结构体 union { struct { uint16_t i; uint16_t j; }x; uint32_t y; }a;//同时由于结构体x和整数y共享内存空间,结构体x的两个成员i和j的值也被修改为了相应的值。 //联合体(union)来访问同一块内存中的不同部分。联合体的特点是它的所有成员共享同一块内存空间, //因此修改一个成员的值会影响到其他成员。这是因为联合体中所有成员都从同一内存地址开始。 int main() { unsigned int i = 0x11223344; printf("%x\n",(i >> 16) + i & 0xFFFF); a.y = 0x11223344; printf("%x\n",a.x.i + a.x.j); exit(0); }
位域
#include<stdio.h> #include<stdlib.h> #include<stdint.h> union { struct { char a:1;//一个比特位 char b:2; char c:1; }x; char y; }w; int main() { w.y = 1; printf("%d\n",w.x.a); exit(0); }
枚举
enum 标识符
{
成员1;
成员2;
...;
};
#include<stdio.h> #include<stdlib.h> enum day { MON, TUS, THR, WES, FRI, AST, SUN };//默认从0开始 enum day { MON = 1, TUS, THR, WES, FRI, AST, SUN };//或者赋值第一个 或者第几个 自动顺次往下排 enum { STATE_RUNNING = 1, STATE_CANCELED, STATE_OVER }; struct job_st { int id; int state; time_t start,end; }; int main() { enum day a = MON; a = SUN; printf("%d\n",a); struct job_st job1; /*获取任务状态 job1.state = STATE_OVER;*/ switch(job1.state) { case STATE_RUNNING: ; break; case STATE_CANCELED: ; break; case STATE_OVER: ; break; default: abort(); } exit(0); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。