我进入C语言并尝试了并集。我的代码如下:
#include <stdio.h>
union date {
int year ;
char month;
char day ;
};
int main() {
union date birth;
birth.year = 1984;
birth.month = 7;
birth.day = 28;
printf("%d, %d, %d\n",birth.year, birth.month, birth.day);
// return 1820,28,28
return 0;
}
我知道由于联合,
birth.year
的值为0111 0001 1100,即1820。但是我不明白birth.month
为什么返回值为28。 最佳答案
引用C11
,第§6.7.2.1章(重点是我的)
因此,您期望的依据是错误的。您不能同时拥有一个工会的所有成员的值,只能拥有一个。
另外,从第6.5.2.3节的脚注95开始,
在这里,最后分配的值day
恰好与month
的大小相同,因此,当您尝试读取day
时,它将返回month
的值。