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

+ Recent posts