공용체 (union) |
사실 공용체(union)는 그다지 많이 사용하는 기능은 아닙니다만, 그래도 C 언어에서 제공하는 것들 중 하나 이니 간단하게 나마 집고 넘어가도록 합시다. 공용체는 구조체와는 달리 메모리를 ‘공유’ 합니다. 이게 도대체 무슨 말인가 하면 아래 그림을 참조해주세요.
위 그림을 보아도 알 수 있듯이 공용체의 각 멤버들의 메모리 시작 주소는 모두 동일합니다. 따라서 우리는 위 그림의 union A 의 경우 j 의 값을 변경함으로 써 i 의 값을 변경할 수 있고 마찬가지로 i 의 값을 변경함으로써 j 의 값을 변경할 수 있게 됩니다. 과연 이 말이 진짜 인지 확인해 보도록 합시다.
/* 공용체 */
#include <stdio.h>
union A
{
int i;
char j;
};
int main()
{
union A a;
a.i = 0x12345678;
printf("%x", a.j);
return 0;
}
성공적으로 컴파일 했다면
음. 과연 우리는 a 의 j 멤버 값을 전혀 설정해 주지 않았음에도 불구하고 i 에 0x12345678 을 대입하자 j 의 값이 78 로 잘 나왔습니다. 그런데 이상한 점이 듭니다. 왜 78 이 나왔을 까요? 0x12 가 나와야 되는 것 아닌가요? 분명히 i 와 j 에 동일한 주소값에 위치해 있고 i 가 0x12345678 로 메모리 상에 있다면 j 는 처음 두 개인 0x12 가 되어야 되는 것 아닌가요? 물론, 여러분의 생각은 옳습니다. 하지만 컴퓨터에서는 수를 이렇게 보관하지 않습니다. 적어도 여러분의 컴퓨터에서는요.
출처 http://itguru.tistory.com/71