복잡한 데이터를 표현하다 보면 구조체 안에 또 다른 구조체를 넣어야 할 일이 생깁니다.
예를 들어 학생의 주소 정보나 회사의 직원 정보를 다룰 때 말이죠.
이럴 때 사용하는 것이 중첩 구조체입니다.
즉, 구조체 안에 또 다른 구조체를 멤버로 포함시킬 수 있는 기능입니다.
● 구조체 안에 구조체 선언
struct Address {
char city[20];
char street[20];
};
struct Person {
char name[20];
int age;
struct Address addr;
};
Person 구조체는 이름, 나이 외에도 addr이라는 구조체 멤버를 포함하고 있습니다.
● 중첩 구조체 값 저장
struct Person p1 = {"지민", 25, {"서울", "강남대로"}};
중첩 구조체는 초기화 시 안쪽 구조체도 함께 괄호로 묶어서 초기화할 수 있습니다.
● 중첩 구조체 멤버 접근
printf("%s\n", p1.addr.city);
printf("%s\n", p1.addr.street);
구조체 안에 구조체가 있어도 점(.)을 계속 연결해 접근하면 됩니다.
● 구조체 포인터로 접근
struct Person *ptr = &p1;
printf("%s\n", ptr->addr.city);
구조체 포인터로 접근할 때도 마찬가지로 화살표 연산자를 여러 번 사용해 안쪽 구조체까지 접근합니다.
● 요약
- 구조체 안에 또 다른 구조체를 포함할 수 있습니다.
- 접근 시 점(.) 또는 화살표(→)를 중첩해서 사용합니다.
- 데이터를 더 체계적이고 계층적으로 표현할 수 있게 해줍니다.
중첩 구조체는 현실 세계의 복잡한 데이터를 C언어로 표현할 때 매우 유용합니다.
다양한 예시를 직접 만들어보며 중첩 구조체 접근을 연습해보세요.
● 실습 문제
문제 1
주소를 담는 Address 구조체와, 이름과 주소를 담는 Person 구조체를 작성하세요.
문제 2
중첩 구조체를 초기화할 때 사용하는 괄호 구조를 예시로 설명하세요.
문제 3
중첩 구조체의 멤버 중 'street'에 접근하는 코드 한 줄을 작성하세요. (일반 변수 기준)
문제 4
포인터 ptr이 구조체를 가리킬 때, 중첩 구조체의 city에 접근하는 방법은?
문제 5
중첩 구조체를 사용하는 이유를 간단히 설명하세요.
▶ 정답 확인하기
정답 1
struct Address {
char city[20];
char street[20];
};
struct Person {
char name[20];
struct Address addr;
};
정답 2
struct Person p = {"영희", {"부산", "해운대로"}};
정답 3
p1.addr.street
정답 4
ptr->addr.city
정답 5
관련된 데이터를 계층적으로 묶을 수 있어서 코드가 더 읽기 쉽고 유지보수가 쉬워집니다.
'프로그래밍언어 > C언어[초급]' 카테고리의 다른 글
[C언어][초급] Chapter60. 파일 입출력 – fopen, fclose로 파일 다루기 (0) | 2025.04.19 |
---|---|
[C언어][초급] Chapter59. 구조체와 포인터 – 포인터로 구조체를 다루는 방법 (0) | 2025.04.19 |
[C언어][초급] Chapter57. 구조체 배열 – 여러 개의 구조체를 한 번에 관리하는 방법 (0) | 2025.04.19 |
[C언어][초급] Chapter56. 구조체 멤버 접근 – 점(.)과 화살표(→) 연산자 차이 알기 (0) | 2025.04.19 |
[C언어][초급] Chapter55. 구조체의 선언과 사용 – 여러 데이터를 하나로 묶는 방법 (0) | 2025.04.19 |