联合其实是C语言的范畴
同一组数据想赋给两种结构体,想来想去还是用联合吧。以前没用过?没关系我们有最棒的老师--英特耐特!
//CTRL_CHECK
typedef struct tagCTRLCHECK{
u8 itype;
u8 iID;
u16 wParam;
u16 lParam;
}CTRLCHECK,*PCTRLCHECK;
//CTRL_PROGRESS
typedef struct tagCTRLPROG{
u8 itype;
u8 iID;
u16 iX;
u16 iY;
}CTRLPROG,*PCTRLPROG;
进来一组数据,根据itype域判断是什么,然后决定使用哪个结构体
定义联合:谭浩强强调不要叫联合,要叫共用体,不过这仨字好像不太通用
union WHITCHCTRL
{
CTRLPROG Prog;
CTRLCHECK Edit;
};
WHITCHCTRL thisctrl;
判断thisctrl.Prog.itype是什么,然后就可以访问相应结构体的域了
//////////////////////////////////为啥要分割线?我也不知道///////////////////////////////////////////////////
结构的定义:
typedef struct tagCTRLPROG{
u8 itype;
u8 iID;
u16 iX;
u16 iY;
}CTRLPROG,*PCTRLPROG;
问:CTRLPROG,*PCTRLPROG这俩是啥子东西?
答:CTRLPROG相当于tagCTRLPROG的别名,*PCTRLPRO相当于tagCTRLPROG型指针的别名;
绝对不是tagCTRLPROG类型的变量!
为什么?因为有typedef!
基本的结构定义是这样的:
struct tagCTRLPROG{
u8 itype;
u8 iID;
u16 iX;
u16 iY;
}ct1; //这里的ct1才是tagCTRLPROG类型的变量
或者
tagCTRLPROG ct2; //这里的ct2才是tagCTRLPROG类型的变量
tagCTRLPROG *pct3; //这里的pct3才是tagCTRLPROG类型的指针
没错,跟上面的那个定义只差了个 typedef
PS:因为今天我被它忽悠了,所以摆出来晒一晒
高手一定要批评指正,免得误导初学者