언어 자료구조 알고리즘/디딤돌 C언어

[C언어] 75. 공용체

언제나휴일 2016. 4. 17. 16:23
반응형



공용체


공용체는 여러 개의 멤버 중에서 하나의 멤버의 값만을 사용하는 사용자 정의 형식이예요.
공용체를 정의하는 것은 구조체와 비슷해요.
공용체를 정의할 때는 struct 키워드 대신 union 사용하세요.
공용체는 구조체와 다르게 모든 멤버마다 별도의 메모리를 부여하지 않고 메모리가 제일 멤버 크기의 메모리만 할당해요.  
unio [
태그명]
{
   [
멤버 형식] [멤버 이름];
   ...
중략 ...
};
 
공용체와 구조체의 메모리 크기 비교
#include <stdio.h>
struct _SDemo
{
   
int a;    int b;
};
union _UDemo
{
   
int a;    int b;
};
int main()
{
    printf(
"struct _SDemo 크기: %d\n", sizeof(struct _SDemo));
    printf(
"union _UDemo 크기: %d\n", sizeof(union _UDemo));
   
return 0;
}
실행 결과
struct _SDemo 크기: 8
union _UDemo 크기: 4

 

공용체는 멤버마다 별도의 메모리를 부여하지 않아서 하나의 멤버의 값을 변경하면 다른 멤버의 값은 의미가 없어요.
따라서 공용체는 순간에 하나의 멤버의 값만 유효하죠.
 
공용체의 하나의 멤버를 변경하면 다른 멤버의 값에 영향
#include <stdio.h>
typedef union _Demo Demo;
union _Demo
{
   
int i;
   
float f;
};
int main()
{
    Demo d;
 
    d.i = 90;
    printf(
"d.i: %10d d.f:%0.2f\n", d.i, d.f);
    d.f = 1.0;
    printf(
"d.i: %10d d.f:%0.2f\n", d.i, d.f);
    d.i = 2;
    printf(
"d.i: %10d d.f:%0.2f\n", d.i, d.f);
   
return 0;
}
실행 결과
d.i:          90  d.f:0.00
d.i: 10653532 d.f:2.00
d.i:            2 d.f:0.00

반응형