Union

b4failrise ㅣ 2018. 6. 29. 18:51

공용체(union)는 구조체와 비슷하게 생겼지만 모든 멤버가 같은 메모리 공간에 자리잡는다는 특징을 가지고 있다.

그렇기 때문에, 멤버 변수의 값 변경은 다른 멤버 변수에 영향을 미칠 수 있다.

공용체의 모든 멤버는 같은 메모리 공간을 사용하기 때문에 공용체 변수의 크기는 가장 큰 크기를 갖는 멤버의 크기와 같게 된다.


모든 멤버는 같은 주소를 갖게 되는데, 물론 타입마다 차지하는 크기가 다를 수는 있다. 예를 들어 char 타입 같은 경우에는 앞쪽의 1바이트만 다른 멤버들과 같이 사용하게 된다.

공용체의 모든 멤버는 같은 메모리 공간을 사용하기 때문에 공용체 변수의 크기는 가장 큰 크기를 갖는 멤버의 크기와 같게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*예제13-1: 공용체의 특징 확인*/
#include <iostream>
union Myunion {
    int i;
    void* p;
    char c;
};
 
using namespace std;
int main()
{
    //공용체 변수 정의
    Myunion uni;
 
    //uni.i와 uni.p의 주소를 확인하자. --> 같아야함. 같은 메모리 공간을 공유한다하였으므로
    cout << "&uni.i = " << &uni.i << endl;
    cout << "&uni.p = " << &uni.p << endl;
    cout << "&uni.c = " << &uni.c << endl;
 
    //uni.i에 값을 넣고 결과를 출력한다.
    uni.i = 0x12345678;
    cout << hex;
    cout << "uni.i = " << uni.i << endl;
    cout << "uni.p = " << uni.p << endl;    // uni.i와 같은 값을 갖는다.
    cout << "uni.c = " << (int)uni.c << endl//little endian
 
    //uni.p에 값을 넣고 결과를 출력한다.
    uni.p = (void*)0x87654321;
    cout << "uni.i = " << uni.i << endl;    //uni.p와 같은 값을 갖는다.
    cout << "uni.p = " << uni.p << endl;
    cout << "uni.c = " << (int)uni.c << endl;
}
cs


'객체 지향 설계' 카테고리의 다른 글

객체 지향 설계  (0) 2021.09.04
사용자 정의 함수를 이용한 sort함수  (0) 2019.04.13
Vector-Sort, iterator  (0) 2018.06.28
Operator Overloading, Operator Conversions  (0) 2018.06.28
Class  (0) 2018.06.27