C++

C++ 공용체 ( union )

Machine_웅 2022. 10. 27. 15:54
728x90
반응형

공용체(union)

공용체(union)는 union 키워드를 사용하여 선언하며, 모든 면에서 구조체와 같습니다.

하지만 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점만이 다릅니다.

모든 멤버 변수가 같은 메모리를 공유하기 때문에

공용체는 한 번에 하나의 멤버 변수밖에 사용할 수 없습니다.

 

만약 하나의 변수를 사용하는데 다른 변수에 값을 할당하지 않은채 사용하려 시도하면 결과를 알 수 없습니다.

메모리 안에는 랜덤한 쓰레기 값이 들어있을 뿐입니다.

 

 

-  공용체는 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입입니다.

-  이러한 공용체는 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받습니다.

-  공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있습니다.

 

예시

	union ShareData
	{
		char a;
		short b;
		int c;
	};

	ShareData var;
	var.a = 'a';
	cout << "union a " << var.a << endl;
	cout << "union a size" << sizeof(var.a) << endl;
	cout << "union b " << var.b << endl;
	cout << "union b size" << sizeof(var.b) << endl;
	cout << "union c " << var.c << endl;
	cout << "union c size" << sizeof(var.c) << endl;

실행 결과

union a a
union a size1
union b -13215
union b size2
union c -858993567
union c size4

 

위에서  var.a 값만 초기화 이후 다른값들을 초기화 하지 않았기 때문에 값이 이상하게 나오는것을 확인 할 수 있다. 

 

예시2

	union ShareData
	{
		char a;
		short b;
		int c;
	};

	ShareData var;
	var.a = 'a';
	cout << "union a " << var.a << endl;
	cout << "union a size" << sizeof(var.a) << endl;

	var.b = 2;
	cout << "union b " << var.b << endl;
	cout << "union b size" << sizeof(var.b) << endl;

	var.c = 655;
	cout << "union c " << var.c << endl;
	cout << "union c size" << sizeof(var.c) << endl;

실행결과 

union a a
union a size1
union b 2
union b size2
union c 655
union c size4

728x90
반응형

'C++' 카테고리의 다른 글

C++ 클래스 생성 / 헤더파일.  (0) 2022.10.28
C++ 함수 포인터  (0) 2022.10.27
C++ 구조체  (0) 2022.10.27
메모리의 동적 할당(dynamic allocation)  (0) 2022.10.27
C++ 학습 참고 사이트  (0) 2022.10.26