C언어 공용체 선언과 초기화 및 출력

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

공용체의 출력은 마지막에 메모리에 삽입된 값만 출력된다고 볼 수 있습니다.