C언어 공용체는 서로 다른 자료형을 한 공간에 삽입하되 가장 큰 자료형의 값만 저장됩니다. union
키워드로 공용체의 정의와 선언을 지정합니다.
C언어 공용체
공용체(union
)는 구조체와 같은 서로 다른 자료형의 집합입니다. 구조체와 차이점은 공용체는 멤버중에서 가장 큰 자료형의 크기만큼만 메모리를 할당받습니다.
예를 들어 구조체에 char(1byte)
+ int(4byte)
+ float(4byte)
가 저장되었다면 메모리에는 9byte
가 저장됩니다. 하지만 같은 조건에서 공용체는 메모리에서 4byte
만 할당을 받습니다.
공간이 하나밖에 없으므로 공용체는 여러 멤버중에서 하나의 자료형만 공간을 사용하며 나머지 멤버들은 없는 상태로 간주됩니다.
공용체는 메모리의 사용량을 줄일 때 사용됩니다.
공용체 정의
공용체 정의는 구조체와 동일합니다. union
이라는 키워드를 사용하며, 공용체명을 이어적습니다.
union 공용체명
{
자료형1 멤버1;
자료형2 멤버2;
자료형3 멤버3;
.. ..
} ;
공용체의 멤버들을 {}
사이에 삽입합니다. }
의 끝에는 반드시 세미콜론;
을 삽입합니다.
#include <stdio.h>
//공용체 정의
union Random
{
char Letter; //멤버명 Letter
int Number; //멤버명 Number
float Point; //멤버명 Point
} ;
//main()
int main()
{
.. .. ...
}
공용체 선언
구조체와 마찬가지로 공용체 정의로는 메모리에 변수값이 삽입되지 않습니다. 공용체 선언을 해줘야 합니다.
int main()
{
union 공용체명 공용체변수명;
}
공용체 선언은 union
키워드와 공용체변수명으로 작성합니다.
#include <stdio.h>
//공용체 정의
union Random
{
char Letter; //멤버명 Letter
int Number; //멤버명 Number
float Point; //멤버명 Point
} ;
//main()
int main()
{
union Random Example; //공용체명(Random), 공용체 변수명(Examle)
return 0;
}
공용체 정의 및 선언 동시
구조체와 동일하게 공용체도 정의와 선언을 동시에 할 수 있습니다.
//공용체 정의
union Random
{
char Letter; //멤버명 Letter
int Number; //멤버명 Number
float Point; //멤버명 Point
} Example ;//구조체 변수명 선언
공용체 초기화
초기화시 공용체변수명.멤버명
형식으로 주소값을 사용하면 됩니다.
#include <stdio.h>
//공용체 정의
union Random //공용체명 Random
{
char Letter; //멤버명 Letter
int Number; //멤버명 Number
float Point; //멤버명 Point
} ;
//main()
int main()
{
union Random Example; //공용체 변수명 Example
Example.Letter = 'A'; //멤버 초기화
Example.Number = 33;
Example.Point = 4.9;
return 0;
}
공용체 출력
공용체는 멤버중에서 맨 마지막에 삽입한 값을 제외하고는 모두 지워지거나 값이 깨집니다.
#include <stdio.h>
//공용체 정의
union Random //공용체명 Random
{
char Letter; //멤버명 Letter
int Number; //멤버명 Number
float Point; //멤버명 Point
};
//main()
int main()
{
union Random Example; //공용체 변수명 Example
Example.Letter = 'A'; //멤버 초기화
Example.Number = 33;
Example.Point = 4.9;
printf("%c \n %d \n %3.1f \n", Example.Letter, Example.Number, Example.Point );
return 0;
}
결과
?
1084017869
4.9
공용체의 출력은 마지막에 메모리에 삽입된 값만 출력된다고 볼 수 있습니다.