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/