为何有些C的结构如此定义?
typedef struct _WINDOWS_IAS_QUERY
{
u_char irdaDeviceID[4];
char irdaClassName[IAS_MAX_CLASSNAME];
char irdaAttribName[IAS_MAX_ATTRIBNAME];
u_long irdaAttribType;
union
{
LONG irdaAttribInt;
struct
{
u_long Len;
u_char OctetSeq[IAS_MAX_OCTET_STRING];
} irdaAttribOctetSeq;
struct
{
u_long Len;
u_long CharSet;
u_char UsrStr[IAS_MAX_USER_STRING];
} irdaAttribUsrStr;
} irdaAttribute;
} WINDOWS_IAS_QUERY, *PWINDOWS_IAS_QUERY, FAR *LPWINDOWS_IAS_QUERY;
类似上面的结构定义,在struct中包含union,union中又包含两个结构,为何不拆开来定义?这么定义有什么好处?望高人指教。
[解决办法]
把彼此有联系的数据放在一个结构里
看起来不是更直观,好理解么
[解决办法]
这种使用union的设计
一般来说他所包含的所有成员访问时是互坼的
这样定义好处是可以节省空间
而且将逻辑含义罗列一起 不松散
[解决办法]
Union能减少内存的占用
至于上面为什么在union里面又定义了2个结构,那是根据实际情况而定的
因为可能数据可能存在2种结构表示,所以用union做比较节约空间
另外struct中包含union也是一种比较常见的,可能数据需要这样去定义
但如果空间足够的话,不建议这样去定义,因为由于不经意的赋值容易产生问题!
[解决办法]
这个union中的数据访问肯定是通过父结构中的某一个字段判别的
你可以看下原码
这里估计是irdaAttribType 这个字段区别到底使用union中哪个结构