**Autonomous driving tech./*C++

[C++] 09_공용체( union ) 와 열거체( enum )

2wnswoo 2024. 9. 16. 14:31

공용체( union )

서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있는 데이터 형식

(구조체는 int형과 double형을 한꺼번에 보관할 수 있지만, 공용체는 int형이나 double형 중에서 한번에 어느 하나만 보관할 수 있음) 

구조체( struct )와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점이 다르다.

즉, 공용체( union )은 내부에 여러가지 타입의 멤버 변수를 선언하지만 실제 사용할 때에는 하나의 멤버 변수만 사용할 수 있다.

 

특징

  • 한 번에 하나의 값만 보관할 수 있으므로, 가장 큰 멤버를 보관할 수 있을 만큼의 공간이 필요하다.(따라서 공용체의 크기는 가장 큰 멤버의 크기가 됨)
  • 멤버 변수끼리 같은 메모리 공간을 공유하기 때문에 각 멤버들의 메모리 시작 주소가 동일하다. (따라서, 각 멤버 변수의 변화가 다른 멤버 변수에 영향을 끼침 / struct는 멤버 변수가 각각 다른 메모리 공간을 할당받음)
  • 메모리 절약을 위해서 사용한다. (여러가지 데이터형을 사용할 수 있지만 이들을 동시에 사용할 수 없을 때)

열거체( enum )

#include <iostream>
using namespace std;

int main() {
    //열거체( enum )
    //기호 상수를 만드는 것에 대한 또 다른 방법

    enum spectrum { red = 0, orange = 2, yellow = 4, green,
    blue, violet, indigo, ultraviolet};                     // 이런식으로 번호를 붙혀줄 수 있음. 마지막으로 붙혀준
                                                                             yellow=4 이후에 번호들은 +1 씩 더해져 green은 5번이 됨
    /*
    1. spectrum을 새로운 데이터형 이름으로 만든다.
    2. red, orange, yellow.. 0에서부터 7까지 정수 값을 각각 나타내는 기호 상수로
    만든다.  // 번호 지정해주기 전
    */

   spectrum a = orange;
   cout <<  a << endl;
>>> 2 (결과값)
    int b;
    b = blue;
    b = blue + 3;
    cout << b << endl;
>>> 9 (결과값)
  return 0;
}

 

 

위 내용은 '인프런 C++ 강의' 와 '티스토리 HyunZzang님의 union(공용체)에 대하여 정리한 글'의 일부를 정리한 내용입니다