首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何有些C的结构如此定义?该如何解决

2012-02-13 
为何有些C的结构如此定义?typedefstruct_WINDOWS_IAS_QUERY{u_charirdaDeviceID[4]charirdaClassName[IAS

为何有些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中哪个结构

热点排行