C 标准规定只有联合的成员存储在同一地址,因此,我们一次只能访问一个成员。由于编译器为联合的成员覆盖存储,更改一个成员会更改任何值以前存储在任何其他成员中。因此,如果我们尝试访问以前存储的成员的值,则该值将毫无意义或未定义。现在这是我的问题:-
struct catalog_item
{
int stock_number;
double price;
int item_type;
union
{
struct
{
char title[TITLE_LEN+1];
char author[AUTHOR_LEN+1];
int num_pages;
} book;
struct
{
char design[DESIGN_LEN+1];
} mug;
struct
{
char design[DESIGN_LEN+1];
int colors;
int sizes;
} shirt;
} item;
} c;
现在,如果完成以下操作
strcpy(c.item.mug.design, "Butterfly");
那么以下两个具有相同的值
printf("%s",c.item.mug.design); //1
和
printf("%s",c.item.shirt.design); //2
为什么“2”的结果不是未定义或无意义的?