본문 바로가기
[C++]

[C++] 공용체. Union, 주의점!!

by Hevton 2021. 6. 22.
반응형

공용체 : 공간을 share한다. 가장 큰 멤버변수의 크기로 메모리가 할당된다. 잘 쓰이진 않는다.

 

union JobUnion {
    char name[32];
    float salary;
    int workerId;
};

struct JobStruct {
    char name[32];
    float salary;
    int workerId;
};



int main() {
    
    JobUnion uJob;
    JobStruct sJob;
    
    // union의 경우엔 가장 큰 멤버의 크기로 나온다. 메모리가 공유된다.
    cout << sizeof(uJob) << endl;
    // struct의 경우엔 x >= 40 의 값이 나오게 된다. 운영체제에 따라 넉넉한 크기로 나올 수도 있으나, 전체 사이즈보다 작게 나오진 않는다.
    cout << sizeof(sJob) << endl;
    
}

----------------------
output

32
40

 


union Union_ {
    int a;
    int b;
    
};

struct Struct_ {
    int a;
    int b;
};



int main() {
    
    Union_ u;
    Struct_ s;
    
    
    u.a = 1;
    u.b = 9;
    
    s.a = 1;
    s.b = 9;
    
    cout << u.a << endl;
    cout << u.b << endl;
    
    cout << s.a << endl;
    cout << s.b << endl;

    
}

-------------------------

output

9
9
1
9

Union은 같은 영역을 공유하게 되기 때문에, 데이터가 9로 덮어씌워져서 결국엔 9만 출력되는 것을 볼 수 있다.

 

 

[ 공용체 덮어써지는 것에 대해 알아둬야할 주의점!! ]

https://dojang.io/mod/page/view.php?id=455 

 

C 언어 코딩 도장: 54.2 공용체와 엔디언

공용체 멤버에 값을 저장하고 가져오는 방법을 좀 더 자세히 알아보겠습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요. union_endian.c #include union Data { // 공용체 정의 char c1; short n

dojang.io

 

반응형

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

[C++] ENUMERATION  (0) 2021.06.24
[C++] 구조체 크기 관련  (0) 2021.06.23
[C++] 구조체와 포인터  (0) 2021.06.22
[C++] 포인터 배열  (0) 2021.06.22
[C++] 배열 포인터  (0) 2021.06.22