Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- php
- Algorithm
- 따라하면서 배우는 C언어
- DP
- BASIC
- BFS
- C
- BOJ
- dfs
- 백준
- web
- 인프런
- 따라하며 배우는 C언어
- 생활코딩
- graph
- udemy
- JavaScript
- Python
- server
- C언어
- Algospot
- sorting
- 종만북
- String
- 따배씨
- 정수론
- programmers
- greedy
- Math
- Cleancode
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 14.15 공용체 Union 의 원리 본문
따배씨 - 따라하며 배우는 C언어
14강 구조체_2
14.15 공용체 Union 의 원리
#include <stdio.h>
int main()
{
/*
Union
- Store different data types in the same momory space
- Strucutre vs Union
*/
union my_union
{
int i;
double d;
char c;
};
union my_union uni;
printf("%zd\n", sizeof(union my_union));
// 8
printf("%lld\n", (long long)&uni);
// 140732920755232
printf("%lld %lld %lld\n", (long long)&uni.i, (long long)&uni.d, (long long)&uni.c);
// 140732920755232 140732920755232 140732920755232
union my_union save[10];
printf("%zd\n", sizeof(save));
// 80
return 0;
}
- 공용체 union 은 구조체 structure 와 사용법이 유사하나 메모리 공간의 사용에 차이가 있다
- Union 은 같은 메모리 공간을 다른 type 들이 공유하게 됨
- 가장 큰 type 의 메모리로 할당 됨
- Union 은 같은 메모리 공간을 다른 type 들이 공유하게 됨
#include <stdio.h>
int main()
{
/*
Union of different types
*/
union my_union
{
int i;
double d;
char c;
};
union my_union uni1;
uni1.c = 'A';
printf("%c %x %d\n", uni1.c, (int)uni1.c, uni1.i);
// A 41 -272632767
uni1.i = 0;
uni1.c = 'A';
printf("%c %x %d\n", uni1.c, (int)uni1.c, uni1.i);
// A 41 65
uni1.d = 1.2;
printf("%d %f %d %c\n", uni1.i, uni1.d, (int)uni1.c, uni1.c);
// 858993459 1.200000 51 3
return 0;
}
- 메모리를 공유하기 때문에, 덮어쓰는 현상이 발생
#include <stdio.h>
int main()
{
/*
Initializing unions
*/
union my_union
{
int i;
double d;
char c;
};
union my_union uni1;
uni1.i = 0;
uni1.c = 'A';
uni1.d = 1.2;
union my_union uni2 = uni1; // Copy another union
union my_union uni3 = { 10 }; // First element (member) only
union my_union uni4 = { .c = 'A' }; // Designated initializer
union my_union uni5 = { .d = 1.23, .i = 100 }; // Do NOT recommend
printf("%d %f %c\n", uni5.i, uni5.d, uni5.c);
// 100 0.000000 d
uni1.i = 123;
uni1.d = 1.2;
uni1.c = 'k';
// uni1 = 'k' 로 사용하기 위한 의도가 됨
return 0;
}
- 공용체의 선언은 여러 type 을 포함 하지만, 메모리를 공유하기 때문에 초기화는 한가지 type 만 가능
#include <stdio.h>
int main()
{
/*
Initializing unions
*/
union my_union
{
int i;
double d;
char c;
};
union my_union uni1;
uni1.i = 0;
uni1.c = 'A';
uni1.d = 1.2;
union my_union* pu = &uni1; // Pointer union
int x = pu->i; // -> operator, same as x = fit.digit
uni1.c = 'A';
double real = 3.14 * uni1.d; // do NOT recommend
return 0;
}
- 공용체 union 은 편리하나, 실수할 가능성이 높으니 유의해야 함
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
'Language > C' 카테고리의 다른 글
[따배씨] 14.17 익명 공용체 (0) | 2021.07.06 |
---|---|
[따배씨] 14.16 공용체와 구조체를 함께 사용하기 (0) | 2021.07.05 |
[따배씨] 14.14 구조체 파일 입출력 연습문제 (0) | 2021.07.04 |
[따배씨] 14.13 구조체의 배열을 사용하는 함수 (0) | 2021.07.04 |
[따배씨] 14.12 익명 구조체 (0) | 2021.06.28 |
Comments