반응형

공용체

 

 

공용체 구조체와 비슷한 문법을 갖고 있으며 형태도 비슷하지만

 

구조체와 달리 멤버들이 하나의 메모리 공간을 공유해서 사용한다는 점에서 가장 다른 특징을 갖고 있다.

 

다음은 공용체를 정의하는 내용을 보여준다.

 

-

 

-

 

다음 내용은 공용체 data라는 새로운 자료형을 정의한 것이다.

 

-

 

 

-

 

구조체에서는 문자형 타입 a 정수형 타입 b 멤버로 갖는 구조체를 선언하면

 

두 가지 자료형의 크기를 더한 것이 구조체의 크기가 된다.

 

(구조체 멤버 정렬을 1바이트로 하였을 경우)

 

하지만

 

공용체에서는 구조체와는 다르게 멤버 중에서

 

가장 큰 메모리 공간을 차지하는 변수의 크기가 공용체의 크기가 된다.

 

그리고 나머지 멤버 변수는 가장 큰 메모리 공간을 차지하는 변수의 메모리 공간을 공유해서 사용하게 된다.

 

아래의 예제를 봐보자.

 

-

 

test47.c
0.00MB

 

 

 

-

 

위 예제를 보면 공용체 변수 union data를 정의한 뒤에 공용체 크기를 확인해 보면

 

공용체 멤버 a의 크기가 1byte 그리고 멤버 b의 크기가 4byte이지만

 

공용체는 멤버 간에 메모리 공간을 공유하기 때문에 

 

차지하는 메모리 공간이 가장 큰 멤버인 b의 크기를 전체 공용체 크기로 하여 4byte가 출력되는 것을 알 수 있다.

 

-

 

 

-

 

위의 그림은 17행에서 data_type_var.b = 0x11223344; 라는 연산 후의 메모리 구조를 나타내고 있다.

 

비록 공용체 변수의 정수형 멤버 b에 값을 할당하고 있지만

 

공용체는 위의 그림과 같이 문자형 멤버 a 정수형 멤버 b 같은 메모리 공간을 공유하고 있기 때문에

 

printf() 함수를 이용해서 멤버 a와 b의 내용을 출력해 보면

 

문자형 멤버 a까지 내용이 변경되어 출력되고 있음을 알 수 있다.

 

 

다음 그림은 22행에서 data_type_var.a = 0x55; 라는 연산 후의 메모리 구조를 나타내고 있다.

 

-

 

 

-

 

22행에서 문자형 멤버 a의 값을 변경한 뒤에 공용체 멤버 a와 b의 내용을 출력해 보면

 

정수형 멤버 b까지 위의 메모리 구조에서 보는 내용처럼 값이 변경되어 출력된 것을 알 수 있다.

 

이는 구조체와는 다르게 공용체가 같은 멤버의 메모리 공간을 공유하고 있음을 보여주는 것이다.

 

반응형

'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글

26. 열거형  (0) 2021.02.01
25. 구조체와 공용체의 혼용  (0) 2021.02.01
23. 비트 필드  (0) 2021.02.01
22. 구조체 초기화  (0) 2021.02.01
21. 구조체 정의  (0) 2021.02.01

+ Recent posts