공용체 Union
공용체란?
* 같은 메모리를 여러 변수로 접근하는 것.
* 메모리를 공유라는 메모리가 절약될 수 도?
공용체 선언과 초기화
* 배열처럼 초기화가 가능하다. ↓
int main()
{
union my_union {
int password;
char name[20];
int social_security_num;
};
union my_union my_union_1 = { 0, };
return 0;
}
* 공용체 전체를 포괄하는 변수 하나만 초기화해줘도 된다. ↓
int main()
{
union my_union {
char a1;
char b1;
int a;
int b;
};
union my_union my_union_1;
my_union_1.a = 0;
return 0;
}
언제 사용하는데? (활용)
* 변수가 동시에 사용되지 않는 경우
<암호를 알고 있으면 통과 아니면 이름이나 민증을 알려달라!>라는 비밀결사대가 있다고 생각합니다.
3가지 중에 하나만 입력하면 되는 경우이므로, 공용체를 사용하지 않으면 변수는 쓸모없는 메모리인 거죠. ↓
int main()
{
union my_union {
int password;
char name[20];
int social_security_num;
};
union my_union my_union_1 = {0,};
return 0;
}
* bit flags에 전체 초기화
bit flags의 전체 초기화는 공요체를 사용하거나 포인터를 사용하는 방법이 있습니다. ↓
예제1 (전체를 변수 하나로 초기화할 수 있는 bit flags)
int main()
{
typedef union {
unsigned char a;
struct{
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
};
}bit_flags_t;
bit_flags_t my_bit_flags = { 0, };
my_bit_flags.b0 = 1;
my_bit_flags.b1 = 0;
my_bit_flags.b2 = 1;
my_bit_flags.b3 = 0;
my_bit_flags.a = 0;
return 0;
}
귀여운 그림은 낡은 창고님이 그리셨습니다.
반응형
'C' 카테고리의 다른 글
malloc 함수, calloc 함수 (0) | 2020.12.24 |
---|---|
가변인자 (0) | 2020.12.24 |
Bit Flags (0) | 2020.12.23 |
Byte Padding (0) | 2020.12.23 |
구조체 배열과 포인터 (0) | 2020.12.22 |