【 C 언어 】 #42 공용체 (union) 이해하기
공용체는 구조체와 선언 및 사용 방법이 매우 유사 하다. 구조체 처럼 서로 다른 데이터 유형을 하나로 묶어 사용할 수 있는 장점이 있으며, 구조체와의 차이점은 정의 된 변수들의 메모리 할당 방식에 차이가 있다. ( 변수가 할당 될 때 하나의 메모리 공간에 여러 변수들의 메모리가 공용으로 할당 되어 사용된다 )
▶ 문제 : int i, int j 를 공용체로 묶어 선언하고 i = 3을 대입 후 printf 문으로 i의 값을 출력하고 , j = 5 를 대입 후 printf 문으로 j의 값을 출력하고 난 후 , 다시 i의 값을 출력해 보라.
(여러 타입의 변수를 공용체로 묶어 사용할 수 있으나 여기서는 int 타입만 사용하였다. 공용체 변수명 등은 임의로 정하라)
▶ 실행 결과 :
(이미지 클릭, 확대해서 보세요)
▶ 포인트 :
- 공용체 또한 구조체와 마찬가지로 실제로 변수를 선언 하는 것은 아니며, 선언하는 변수 들의 틀(템플릿)을 만들어 주는 것에 불과 하다는 점을 기억하라.
- 공용체와 구조체의 차이점 :
구조체의 경우 선언 하는 변수 만큼 메모리를 할당한다.
예) int i , char j , double k 라고 구조체로 묶어 선언 할 경우
모두 4 byte (int) + 1 byte (char) + 8 byte (double) = 13 byte 의 메모리를 할 당하게 된다. 즉, 메모리 공간을 변수마다 각각 할당하여 사용함
그러나 공용체는 함께 선언된 변수들을 하나의 메모리에 할당하게 된다.
단, 이때 함게 선언된 변수들중 사이즈가 가장 큰 것을 기준으로 할당 하게 된다
예) int i , char j , double k 라고 공용체로 묶어 선언 할 경우
모두 4 byte (int) , 1 byte (char) , 8 byte (double) , 중 용량이 가장 큰 8 byte 를 기준으로 메모리를 할 당하게 된다. 따라서 위 프로그램의 실행결과를 보면 i = 3 이 입력 되었음에도 불구하고 j=5 가 입력 된 후에는 , (동일 번지의) 메모리를 공유하고 있던 i에도 5가 입력 되어 버린 것이다.
즉, 메모리 공간을 공용체로 선언된 모든 변수들이 같이 사용함.
- 공용체는 과거 마이크로 보드 처럼 메모리 용량이 작아 프로그램의 제약이 많았던 상황에서 주로 사용되었으며, 메모리를 순차적으로 사용하면 되는 프로그램에서 주로 사용된 기법이었다.
▶ 프로그램 (답안 예시) :
(이미지 클릭, 확대해서 보세요)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
▶ 소스코드 다운로드 :
'Language > C & C++' 카테고리의 다른 글
【 C 언어 】#44 전역변수-지역변수 이해하기 (0) | 2018.05.14 |
---|---|
【 C 언어 】 #43 데이터형에 따른 메모리 할당 크기 확인하기 (0) | 2018.05.09 |
【 C 언어 】 #41 사용자 정의 데이터형(typedef) 이해하기 (0) | 2018.05.08 |
【 C 언어 】 #40 열거형(enum) 이해하기 (0) | 2018.05.04 |
【 C 언어 】 #39 구조체 이해하기2 (배열, for문 활용) (0) | 2018.05.03 |