신규 블로그를 만들었습니다!
공용체 (union)
공용체는 구조체와 비슷한 자료형이다.
하지만, 메모리공간을 절약할 수 있다는 차이가 존재한다.
어떻게해서 메모공간을 절약할까?
공용체는 메모리크기가 가장 큰 자료형의 공간을 공유하는 자료형이다.
예를들어, char c; int i; double d; 3가지 자료형이 있다고 하자.
각각의 자료형은 1byte, 4byte, 8byte라는 메모리크기를 갖는다. 그렇다면 총 13byte의 크기를 갖게 된다.
하지만, 공용체의 경우는 조금 다르다. 가장큰 자료형인 double(8byte)를 공유하기 때문에 총 8byte의 크기를 갖게 된다.
이렇게 메모리 공간을 절약할 수 있다는 장점이 있다.
장점이 있다면 단점이 있듯이, 공용체는 메모리를 공유하고 있기 때문에 다른 자료형에 간섭을 하게 된다.
그래서 데이터 값을 변경을 하게 되면 다른 데이터도 변하게 된다는 단점이 있다.
#include <stdio.h>
union uni
{
int a;
int b;
};
int main(void) {
union uni u;
// a만 선언한다.
u.a = 10;
printf("u.a = %d\n", u.a);
printf("u.b = %d\n", u.b);
printf("a만 선언했지만, b에도 같은 10이 들어가 있는것을 알 수 있다.\n");
printf("메모리를 공유하고 있기 때문에!!\n\n");
// b를 선언한다.
u.b = 20;
printf("u.a = %d\n", u.a);
printf("u.b = %d\n", u.b);
printf("b만 20으로 선언했지만 a에도 20이 들어가는것을 알 수 있다.\n");
printf("이렇게 다른 자료형의 데이터값에도 영향을 준다.\n\n");
// size를 확인해보자
printf("sizeof(union uni) = %d\n", sizeof(union uni));
return 0;
}
관련 글
2018/02/07 - [Language/C] - C언어 :: 구조체와 배열, 구조체와 포인터 (-> 사용법) #17
2018/02/09 - [Language/C] - C언어 :: gets(), puts() 함수 사용법 #19
'Language > C&C++' 카테고리의 다른 글
C언어 :: strlen(), strcpy(), strncpy() 함수 사용법 #20 (0) | 2018.02.09 |
---|---|
C언어 :: gets(), puts() 함수 사용법 #19 (0) | 2018.02.09 |
C언어 :: 구조체와 배열, 구조체와 포인터 (-> 사용법) #17 (0) | 2018.02.07 |
C언어 :: 구조체 (Struct), 중첩 구조체 #16 (0) | 2018.02.07 |
C언어 :: 포인터와 함수, static #15 (0) | 2018.02.06 |
최근댓글