공용체(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 |