C 標準では、共用体のメンバーのみが同じアドレスに格納されるため、一度にアクセスできるメンバーは 1 つだけであると規定されています。コンパイラは共用体のメンバーのストレージをオーバーレイするため、1 つのメンバーを変更すると値が変更されます。以前に他のメンバーのいずれかに格納されていた.したがって、以前に格納されたメンバーの値にアクセスしようとすると、値は無意味または未定義になります.今ここに私の質問があります:-
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」の結果が未定義または無意味ではないのはなぜですか?