활동 목표
- 구조체, Union, Enumeration
활동 결과
구조체
- 구조체 변수
- 서로 다른 형의 구성원(member)들을 하나의 단위로 묶어 관리할 수 있다.
- 구성원들은 이름으로 접근하며, 배열과 달리 각 구성원의 자료형은 다를 수 있다.
- 예시 코드:
struct { int number; char name[NAME_LEN + 1]; int on_hand; } part1, part2;
- 예시 코드:
- 각 구조체는 자체적인 이름 공간(namespace)을 가지므로, 같은 이름의 구성원이 다른 구조체에 존재해도 충돌하지 않는다.
- 구조체 변수 초기화
- 선언과 동시에 중괄호
{}
안에 초기값 리스트를 제공하여 초기화할 수 있다. - 초기화 값은 구성원 선언 순서에 따라 할당된다.
- 예시 코드:
struct { int number; char name[NAME_LEN + 1]; int on_hand; } part1 = {528, "Disk drive", 10}, part2 = {914, "Printer cable", 5};
- 예시 코드:
- C99부터는 지정 초기자(designated initializer)를 사용해 구성원 이름을 명시할 수 있으며, 순서에 상관없이 값을 지정할 수 있다.
- 예시 코드 (지정 초기자):
{ .on_hand = 10, .name = "Disk drive", .number = 528 }
- 예시 코드 (지정 초기자):
- 선언과 동시에 중괄호
- 구조체 연산 및 구성원 접근
- 구성원에 접근할 때는 점 연산자
.
를 사용한다. - 구성원은 왼쪽값(lvalue)이므로, 할당이나 증감 연산에도 사용할 수 있다.
- 예시 코드:
printf("Part number: %d\n", part1.number); part1.on_hand++;
- 예시 코드:
- 구조체 간의 할당(
=
)은 구성원 단위로 복사하며, 배열 구성원도 함께 복사된다.
- 구성원에 접근할 때는 점 연산자
- 구조체형 정의
- 구조체 태그(structure tag): 구조체에 이름을 부여하여 여러 곳에서 동일한 형식을 사용할 수 있도록 한다.
- 예시 코드:
struct part { int number; char name[NAME_LEN + 1]; int on_hand; }; struct part part1, part2;
- 예시 코드:
- typedef를 이용한 형명 정의: typedef를 사용하면 구조체 선언 후 별도의
struct
키워드 없이 형 이름을 사용할 수 있다.- 예시 코드:
typedef struct { int number; char name[NAME_LEN + 1]; int on_hand; } Part; Part part1, part2;
- 예시 코드:
- 구조체 태그나 typedef 이름을 사용하여 함수의 매개변수나 반환형으로 활용할 수 있다.
- 구조체 태그(structure tag): 구조체에 이름을 부여하여 여러 곳에서 동일한 형식을 사용할 수 있도록 한다.
- 입력변수와 반환값으로서의 구조체
- 구조체는 함수의 인자로 전달하거나 반환값으로 사용할 수 있다.
- 예시 (입력변수로 사용):
void print_part(struct part p) { printf("Part number: %d\n", p.number); printf("Part name: %s\n", p.name); printf("Quantity on hand: %d\n", p.on_hand); }
- 예시 (구조체 반환):
struct part build_part(int number, const char* name, int on_hand) { struct part p; p.number = number; strcpy(p.name, name); p.on_hand = on_hand; return p; }
- 예시 (입력변수로 사용):
- 구조체를 전달하거나 반환할 때 내부 구성원이 복사되므로, 큰 구조체의 경우 포인터를 전달하는 방식이 효율적이다.
- 구조체는 함수의 인자로 전달하거나 반환값으로 사용할 수 있다.
- 복합리터럴 (C99)
- 복합리터럴을 사용하면 임시 구조체를 선언 없이 "즉시" 생성하여 함수 인자나 변수에 할당할 수 있다.
- 예시 코드 (함수 인자로 전달):
print_part((struct part){528, "Disk drive", 10});
- 예시 코드 (변수에 할당):
part1 = (struct part){528, "Disk drive", 10};
- 예시 코드 (함수 인자로 전달):
- 복합리터럴은 지정 초기자와 함께 사용할 수 있으며, 미지정 구성원은 0으로 초기화된다.
- 복합리터럴을 사용하면 임시 구조체를 선언 없이 "즉시" 생성하여 함수 인자나 변수에 할당할 수 있다.
참고 자료
- King, K. N., 2008, C Programming: A Modern Approach, W. W. Norton & Company.
'모각코 > 2025 동계 모각코' 카테고리의 다른 글
[2025 동계 모각코] 모각코 6차 활동 기록 (0) | 2025.02.13 |
---|---|
[2025 동계 모각코] 모각코 5차 활동 기록 (0) | 2025.02.13 |
[2025 동계 모각코] 모각코 3차 활동 기록 (0) | 2025.01.28 |
[2025 동계 모각코] 모각코 2차 활동 기록 (0) | 2025.01.16 |
[2025 동계 모각코] 모각코 1차 활동 기록 (0) | 2025.01.03 |