저번시간에 이어서 오늘은 공용체(Union),열거형(enum),사용자 정의 자료형(typedef)에 대해서 알아 볼 것이다.
우선 union은 공용체라고도 불린다. 유니온은
구조체와 비슷하지만 같은 메모리 영역을 여러개의 변수가 공유하고, 그 메모리의 크기는 공용체 멤버 중 가장 큰놈의 바이트로 결정된다.
또, 공용체와 구조체의 다른점은 구조체는 그 안 멤버들을 모두 쓴다면, 공용체는 그 안 멤버들 중 하나만 사용한다는 것이다.
따라서, 메모리 절약차원에서 뛰어나다는 장점이 있다.
말로는 읽기도 싫고 이해도 잘 안되니 그림으로 보자.
구조체와 마찬가지로 공용체 형 선언을 먼저 해주고 그 공용체의 변수 선언은 또 따로 해줘야한다. 구조체와 마찬가지로 멤버 접근은 . 연산자로 해준다.
메인함수에서 보듯이 v.c만 초기화 해주고 프린트를 해보면 v.c의 값만 나오고 i는 쓰레기 값이 출력된다. 그 반대도 마찬가지이다. 그냥 둘중에 하나만 꺼내서 쓰는거다. 두개 다 쓸려면 공용체를 쓸 필요가 없다. 구조체를 쓰지…
공용체의 크기는 4바이트가 된다.
공용체에 대한 타입 필드 사용
이 코드는 구조체 안에 공용체가 사용된 예제이다.
이렇게 구조체의 type에 STU_NUMBER이 들어가는지 REG_NUMBER이 들어가는지에 따라서 switch case문을 사용해 공용체에서 선택되는 멤버를 끄집어낼수 있다.
다음으로 enum 열거형에 대해서 알아보겠다.
열거형은 enum이라는 키워드로 선언을 해준다. 그림으로 보자면
이렇게 된다. 이것은 열거형과 기호상수들의 자료형을 선언해 준 것이므로 열거형 변수를 선언해보면
이렇게 선언할 수 있고, 변수에 기호상수를 대입해주면 그 변수안에는 정수 값이 들어가게 된다.
그렇다면 열거형이 왜 필요할까?
1.오류를 줄이고 가독성을 높일 수 있다.
2. 0보다는 SUN과 같은 기호상수가 의미를 더 쉽게 알 수 있다.
3. today에 9와 같은 의미 없는 값이 대입되지 않도록 미리 차단해준다.(컴파일러가 열거형 멤버 이외의 사용을 방지한다.)
그럼 열거형은 어떻게 초기화할까?
바로 이렇게 할 수 있다.
기호상수에 값을 지정하지 않으면 자동으로 0부터 할당된다. 만약 SUN을 1로 지정해줬으면 지정된 수부터 1씩 늘어난다.
마지막으로 typedef 사용자 정의 자료형에 대해서 알아보겠다.
키워드는 typedef로 이렇게 선언해 줄 수 있다.
위 그림같은 경우 unsigned char자료형을 BYTE라는 새로운 자료형으로 사용자가 지정한 것이다. (이름 바꿔치기)
예제를 보자면
이렇게 int를 INT32로 바꿔줬으므로 int i; 와 INT32 i;는 둘다 정수형 변수 i를 만들어낸다.
또한 구조체를 typedef를 사용해서 새로운 타입으로 정의할 수 있다.
이렇게 바꿔줄 수 있다.
struct point a,b; 와 POINT a,b; 는 둘다 int x, int y를 가지고 있는 구조체 변수 a,b를 만들어낸다.
저 혼자 공부하는 것이므로, 만약 틀린것이 있다면 댓글로 지적해주시면 감사하겠습니다!
'학과 공부 > C & C++' 카테고리의 다른 글
[C++] fill 함수에 대해 알아보자 (0) | 2024.02.22 |
---|---|
포인터배열과 배열포인터 예제,이중포인터 예제 배열과 포인터[C프로그래밍] (2) | 2023.11.18 |
포인터의 활용(1)[C프로그래밍] (0) | 2023.11.17 |
구조체(2)[C프로그래밍] (1) | 2023.11.03 |
구조체(1)[C프로그래밍] (0) | 2023.11.02 |