C++ 관련 질문입니다

토스님@Google의 이미지
#include<iostream>
struct Vector2
{
	int x, y;
};
struct Vector4
{
public:
	union
	{
		struct
		{
			int x, y, z, w;
		};
		struct
		{
			Vector2 a, b; //부분 (가)
		};
	};
};
void PrintVector(const Vector2& vector)
{
	std::cout << vector.x << ", " << vector.y << std::endl;
}
int main()
{
	Vector4 vector4 = { 1,2,3,4 };
	PrintVector(vector4.a);
	PrintVector(vector4.b);
	vector4.x = 50;
	PrintVector(vector4.a);
	PrintVector(vector4.b);
	std::cin.get();
}

이 코드에서 Vector4 의 union 안에 있는 a를 출력하면 x,y 의 값을 출력하고 b를 출력하면 z,w의 값을 출력합니다. 부분 () 의 a 는 Vector2::x 이고, 부분 () 의 b 는 Vector2::y 인가요?왜 a에 두가지의 값(x,y)이 있는건가요? 한개만 들어가야 정상 아닌가요?

나빌레라의 이미지

자료형이 전부 int이므로 그냥 '칸'이라는 단어로 퉁쳐서 생각해 보죠.

vector4는 4칸짜리 구조체이고,
vector2는 2칸짜리 구조체입니다.

vector4안에 2칸짜리 구조체 2개 (a, b)가 union이므로 a는 두 칸이죠. 그러니까 x,y 죠. 당연히 b는 z, w 인거고요.

구조체의 인스턴스가 메모리에 어떻게 잡히는지를 그림으로 그려보면 이해가 될겁니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라