C 언어에서는 데이터를 효율적으로 관리하고 코드를 읽기 쉽게 작성하기 위해 구조체(struct), 열거형(enum), 공용체(union)라는 세 가지 중요한 데이터 구조를 제공한다.
구조체 (struct)
구조체(struct)는 서로 다른 데이터 타입을 하나의 단위로 묶어주는 역할을 한다.
구조체의 특징
- 서로 다른 데이터 타입을 하나로 묶을 수 있다.
- 구조체를 정의하고 나면, 이를 하나의 데이터 타입처럼 사용할 수 있다.
구조체 정의 방법
struct 구조체이름 {
데이터타입 멤버1;
데이터타입 멤버2;
...
};
- struct : 구조체를 정의하기 위한 키워드이다.
- 구조체이름 : 구조체의 이름으로, 사용자가 자유롭게 지정할 수 있다.
- 멤버 : 구조체가 포함하는 데이터 필드로, 서로 다른 데이터 타입의 변수들로 구성된다.
구조체 예
#include <stdio.h>
struct Student {
char name[50];
int age;
int studentID;
};
int main() {
struct Student student1 = {"Alice", 20, 1001};
printf("Name : %s\n", student1.name);
printf("Age : %d\n", student1.age);
printf("Student ID : %d\n", student1.studentID);
return 0;
}
- struct Student : 학생 정보를 저장하는 구조체를 정의한다.
- student1 : Student 구조체의 변수를 선언하고 초기화한다.
열거형 (enum)
열거형(enum)은 상수 값들의 집합을 정의하기 위해 사용된다.
열거형의 특징
- 정수 상수들의 집합을 정의할 수 있다.
- 기본적으로 0부터 시작하는 정수 값이 할당된다.
열거형 예제
#include <stdio.h>
enum State {
READY, // 0
RUNNING, // 1
STOPPED // 2
};
int main() {
enum State currentState = READY;
if (currentState == READY) {
printf("System is ready to start.
");
} else if (currentState == RUNNING) {
printf("System is running.
");
} else if (currentState == STOPPED) {
printf("System is stopped.
");
}
return 0;
}
공용체 (union)
공용체(union)는 여러 멤버를 같은 메모리 공간을 공유하도록 정의하는 데이터 구조이다. 즉, 하나의 메모리 공간을 여러 멤버가 번갈아 사용할 수 있도록 하는 방식으로, 메모리 사용량을 최적화하기 위해 사용된다. 공용체는 한 번에 하나의 멤버만 값을 가질 수 있다. 이는 공용체의 모든 멤버가 같은 메모리 공간을 공유하기 때문이며, 한 멤버의 값을 저장하면 그 메모리 위치가 다른 멤버와 겹치기 때문에 다른 멤버의 값은 덮어써지게 된다.
공용체의 특징
- 여러 멤버가 같은 메모리 공간을 공유한다.
- 가장 큰 데이터 타입의 크기만큼의 메모리만 사용된다.
- 한 번에 하나의 멤버만 값을 가질 수 있다는 점에서 구조체와 다르다.
공용체 예제
#include <stdio.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 220.5;
printf("data.f: %f\n", data.f);
snprintf(data.str, 20, "Hello");
printf("data.str: %s\n", data.str);
// 이전 값들이 덮어써짐
printf("data.i after str: %d\n", data.i);
printf("data.f after str: %f\n", data.f);
return 0;
}
- union Data는 정수, 실수, 문자열을 저장할 수 있지만 한 번에 하나의 값만 유지할 수 있다. data.f나 data.str에 값을 저장하면 이전에 저장한 다른 멤버의 값은 덮어써지게 된다.
728x90
'C언어' 카테고리의 다른 글
[C언어] static 키워드란? (0) | 2024.10.11 |
---|---|
[C언어] volatile 키워드란? (0) | 2024.10.11 |
[C언어] 쉬프트 연산과 비트 연산 (0) | 2024.10.10 |
[C언어] (void *) 포인터란? (0) | 2024.10.10 |
[C언어] memcpy() 함수 (0) | 2024.10.10 |