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 |