반응형
[C #17] 구조체(Structs), 공용체(Unions), 열거형(Enums)
- 구조체(struct): 서로 다른 데이터 타입을 하나로 묶음.
- 공용체(union): 여러 데이터 타입이 메모리를 공유.
- 열거형(enum): 상수 집합에 이름 부여.
- 구조체는 값을 직접 전달하거나 포인터를 통해 참조로 전달 가능.
구조체 (Structs)
구조체의 개념
- 정의: 서로 다른 데이터 타입을 하나로 묶는 사용자 정의 데이터 타입.
- 용도: 관련된 데이터를 그룹화하여 관리.
구조체 정의와 선언
struct Point {
int x;
int y;
};
- 사용
struct Point p1;
p1.x = 10;
p1.y = 20;
printf("Point: (%d, %d)\n", p1.x, p1.y);
구조체 초기화
struct Point p2 = {30, 40};
typedef로 단순화
typedef struct Point Point;
Point p3 = {50, 60};
중첩 구조체 (Nested Structs)
구조체 안에 다른 구조체를 포함할 수 있습니다.
struct Line {
struct Point start;
struct Point end;
};
struct Line l = {{0, 0}, {10, 10}};
printf("Line starts at (%d, %d) and ends at (%d, %d)\n",
l.start.x, l.start.y, l.end.x, l.end.y);
공용체 (Unions)
공용체의 개념
- 정의: 여러 변수의 메모리를 공유하며, 한 번에 하나의 값만 저장 가능.
- 용도: 메모리 효율성을 높이는 데 사용.
공용체 선언
union Data {
int i;
float f;
char str[20];
};
사용
union Data data;
data.i = 10;
printf("Data as integer: %d\n", data.i);
data.f = 3.14;
printf("Data as float: %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("Data as string: %s\n", data.str);
주의사항
- 공용체는 메모리를 공유하기 때문에 마지막으로 저장한 값만 유효합니다.
열거형 (Enums)
열거형의 개념
- 정의: 상수 집합에 이름을 부여.
- 용도: 코드를 더 읽기 쉽게 만듦.
열거형 선언
enum Color { RED, GREEN, BLUE };
사용
enum Color c = RED;
if (c == RED) {
printf("Color is RED\n");
}
값 지정
enum Color { RED = 1, GREEN = 2, BLUE = 3 };
구조체, 공용체, 열거형의 활용
구조체를 함수 인자로 전달
- 값으로 전달:
void printPoint(struct Point p) { printf("Point: (%d, %d)\n", p.x, p.y); }
- 참조로 전달:
void movePoint(struct Point *p, int dx, int dy) { p->x += dx; p->y += dy; }
응용 예제
1. 구조체와 열거형 활용
#include <stdio.h>
typedef struct {
int x;
int y;
enum { RED, GREEN, BLUE } color;
} ColoredPoint;
void printPoint(ColoredPoint p) {
printf("Point at (%d, %d) with color %d\n", p.x, p.y, p.color);
}
int main() {
ColoredPoint p = {10, 20, GREEN};
printPoint(p);
return 0;
}
2. 공용체로 메모리 효율성 증대
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
printf("Size of union: %lu\n", sizeof(data));
data.i = 100;
printf("Integer: %d\n", data.i);
data.f = 3.14;
printf("Float: %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("String: %s\n", data.str);
return 0;
}
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C #16] 문자열 입력 기본 함수와 상황별 선택 (3) | 2024.12.14 |
---|---|
[C #15] 문자열 (Strings) (0) | 2024.12.13 |
[C #14] 동적 메모리 할당 (Dynamic Memory Allocation) (0) | 2024.12.12 |
[C #13] 포인터와 배열 (Pointers and Arrays) (1) | 2024.12.11 |
[C #12] 포인터 (Pointers) (1) | 2024.12.10 |