공용체(union)

-> 사용자 정의 자료형

-> 구조체와 비슷하다.

 

공용체의 형태

	union 자료형이름
	{
		멤버 변수
	}

 

공용체 선언

tagBox tBox;
uniBox uBox;

 

공용체 초기화

tagBox tBox = {};
uniBox uBox = {};

 

 

공용체의 각 멤버 초기화

tagBox tBox = {10, 3.14};
uniBox uBox = {10, 3.14f};

 

 

구조체와 공용체의 차이점

-> 구조체 각 멤버들이 메모리에 할당이 된다.

-> 공용체 메모리가 하나만 할당한 후 모든 멤버들이 공유한다.

(즉, 공용체에 들어있는 멤버 변수들은 모두 같은 메모리 공간을 사용 한다.)

struct tagBox
{
	int iA;
	double dB;
};
union uniBox
{
	int iA;
	float fB;
};

void main()
{
	tagBox		tBox = {10, 3.14};
	uniBox		uBox = {10};

	cout << "&tBox.iA: " << &tBox.iA << endl;
	cout << "&tBox.dB: " << &tBox.dB << endl;
	cout << "-----------------------------------------" << endl;
	cout << "&uBox.iA: " << &uBox.iA << endl;
	cout << "&uBox.dB: " << &uBox.fB << endl;

}

 

공용체의 크기
-> 공용체의 크기는 멤버들 중 가장 큰 멤버 변수의 크기로 설정된다.

union uniBox
{
	int iA;
	double dB;
};

void main()
{	
	uniBox		uBox = {};

	cout << "공용체의 크기: " << sizeof(uBox) << endl;
}

공용체는 안에 있는 멤버 변수의 값 변경시 가장 마지막에 변경한 변수의 값만 적용이 되고 나머진 쓰레기 값이 된다.

union tagTest
{
	int iA;
	float iB;
};


void main()
{

	tagTest test;
	test.iA = 10;
	cout << test.iA << endl;
	test.iB = 5.f;
	cout << test.iB << endl;
	cout << test.iA << endl;
}

 

'Programming > C++ Basic' 카테고리의 다른 글

C++ 매크로(#define)  (0) 2020.09.07
C++ 함수 포인터  (0) 2020.09.07
C++ 열거체(enum)  (0) 2020.09.06
C++ 경로  (0) 2020.09.02
C++ 입출력 스트림 버퍼, 단일 문자 입/출력 함수  (0) 2020.09.02

+ Recent posts