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

最佳答案

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

IN_ADDR srcip;


要么

struct in_addr srcip;


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

通过执行in_addr srcip,您可能会声明名称空间中可用的其他名称in_addr

关于c - 引用 union 中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9543166/

10-11 04:32