我显然不太明白它们是如何工作union的Си,所以请在下面的小代码中评论我的问题。(为了缩短代码,我只给出函数main())
int main(void)
{
int sockfd;
socklen_t size = 2000;
union {
struct sockaddr sa;
char mas[2000];
}un;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
getsockname(sockfd, (struct sockaddr*)un.mas,&size);
printf("%d\n\n", un.sa.sa_family);
return 0;
}
1)我什至没有填写结构struct sockaddr sa,为什么它printf()打印正确的答案?
2)如果我改写,答案将是错误的union。struct
3) 如果变量不在unionor中struct,则会弹出警告sa.sa_family’ is used uninitialized in this function。
请帮我弄清楚
不方便的例子。想象一下你有一个工会:
第一个字段 - int - 结合了后续的 char 字段。这就是工会的概念。这是跟踪:
可以看出,通过更改其中一个小char字段,名为value的大int字段也发生了变化。事实上,我们的 union 是一个 int 数,但是为了方便起见,我们将这个数分成了 4 个字节 a,b,c,d。我们可以同时处理所有 4 个字节 - 值,也可以处理每个单独的字节 - a、b、c、d。
在你的情况下,一切都是相似的。有一个struct sockaddr sa,进一步,它表示为一个长度为2000字节的char数组。
1.) 填写。
2.) 这是合乎逻辑的,结构就是结构,联合就是联合。不要混淆他们。
3.)它甚至不起作用吗?