1. 공용체(union)
- 공용체 멤버 변수들은 동일한 메모리 공간을 공유(메모리 공간 절약가능)
- union 키워드를 사용하여 공용체를 정의
- 공용체 변수 선언 후 사용
- 공용체 멤버변수는 점(.)을 같이 사용
union DATA {
int su;
char mo;
} test1;
공용체 정의 후 별도로 공용체 변수선언
union DATA test2;
공용체 변수를 활용하여 출력
test1.su = 65;
printf("%d", test1.su); //---> 65
printf("%c", test1.mo); //---> A
test2.mo='B';
printf("%d", test2.su); //--- > 66
printf("%c", test2.mo); //--- > B
2. 열거형 (enumeration)
- 기호상수들을 모아놓은 자료형 (상수값 인덱스는 0부터 1씩 증가)
- enum 키워드를 사용하여 정의
- 열거형 변수 선언 후 사용
enum COLOR { RED, BULE, YELLOW, GREEN};
enum COLOR select = RED;
3. 데이터 타입 정의(typedef)
- 복잡한 자료형의 별명을 정의하는 키워드
- 새로운 자료형의 이름 끝에 일반적으로 _t를 붙인다.
- typedef 키워드를 사용하여 선언
typedef unsigned int uint_t;
uint_t a =0; // 동일한 표현 unsigned int a =0;
공용체의 경우
union DATA {
int su;
char mo;
}
typedef union DATA udata_t;
udata_t data; // union DATA data;
data.su=66;
data.mo='A';
typedef union DATA {
int su;
char mo;
}udata_t;
udata_t data; // union DATA data;
data.su=66;
data.mo='A';
열거형의 경우
enum COLOR {RED, BULE,YELLOW, GREEN};
typedef enum COLOR ecolor_t;
enum COLOR select = RED; // ecolor_t select =RED;
typedef enum COLOR {RED, BULE,YELLOW, GREEN} ecolor_t;
enum COLOR select = RED; // ecolor_t select =RED;
구조체의 경우
struct MEM {
int id;
char pw[10];
};
typedef struct MEM smem_t;
smem_t one;
one.id=100;
one.pw="qwer";
typedef struct MEM {
int id;
char pw[10];
} smem_t;
smem_t one;
one.id=100;
one.pw="qwer";
연습
#include <stdio.h>
union DATA {
int su;
int mo;
};
enum COLOR { RED, BULE, YELLOW, GREEN };//열거형 선언
struct MEM {
int id;
char pw[10];
} mem_t;
int main() {
printf("공용체 연습 \n");
union DATA test; //공용체변수선언 => 동일한메모리공간을 공유하므로 초기값도 공유된다.
//자료형이다르면 초기값을 안 넣으면 쓰레기값이다
test.su = 65;
printf("test.su = %d, test.mo = %d \n", test.su, test.mo);
printf(" &test.su = %p &test.mo = %p\n", &test.su, &test.mo);
test.mo = 100;
printf("test.su = %d, test.mo = %d \n", test.su, test.mo);
printf(" &test.su = %p &test.mo = %p\n", &test.su, &test.mo);
union DATA test1 = { 0 };
test1.mo = 'C';
printf(" test1.su = %d, test1.mo = %d \n", test1.su, test1.mo);
printf(" &test1.su = %p &test1.mo = %p\n", &test1.su, &test1.mo);
enum COLOR select = RED; //열거형변수선언
switch (select)
{
case RED:
printf("빨강\n");
break;
case BULE:
printf("파랑\n");
break;
case YELLOW:
printf("노랑\n");
break;
case GREEN:
printf("녹색\n");
break;
default:
break;
}
printf("typedef 연습 \n");
//선언
typedef unsigned int uint_t;
typedef union DATA udata_t;
typedef enum COLOR ecolor_t;
typedef struct MEM smem_t;
//자료입력
uint_t a = 100;
udata_t b;
ecolor_t c = RED;
smem_t d = { 100, "qwer" };
b.su = 65;
//출력
printf("uint_t a = %d", a);
printf(" udata_t b = %c\n", b.mo);
printf("ecolor_t c = %d\n", c);
printf("smem = %d %s \n ", d.id, d.pw);
}
'C, C++ > 5.구조체' 카테고리의 다른 글
0223 구조체 연습문제 (0) | 2022.02.23 |
---|---|
구조체 개념 정리 (0) | 2022.02.23 |