引用联合中的变量

时间:2012-03-03 03:29:23

标签: c tcp struct unions

typedef struct in_addr {
  union {
    struct {
      u_char s_b1,s_b2,s_b3,s_b4;
    } S_un_b;
    struct {
      u_short s_w1,s_w2;
    } S_un_w;
    u_long S_addr;
  } S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

in_addr srcip

一个简单的in_addr结构,我注意到我只能通过srcip.S_addr引用S_addr,而srcip.S_un.S_addr不起作用。我对此进行了测试。

struct test_struct {
        union {
            int m;
            int n;
        }test;
    };
    test_struct x;
    x.test.m = 1;

成功编译,但当我将x.test.m = 1更改为x.m = 1时,编译失败。为什么那两个相似的条件不一致?

srcip.S_addr成功,srcip.S_un.S_addr失败

x.test.m成功,但x.m失败,完全不同!

使用VS2008和Win7

1 个答案:

答案 0 :(得分:1)

要在问题中声明in_addr结构,请使用typedef:

IN_ADDR srcip;

struct in_addr srcip;

然后您应该可以使用srcip.S_un.S_addr

通过执行in_addr srcip,您可能会声明命名空间中可用的名为in_addr的其他内容。