본문 바로가기
프로그래밍언어/C언어[초급]

[C언어][초급] Chapter58. 중첩 구조체 – 구조체 안에 또 다른 구조체 담기

by about_IT 2025. 4. 19.

복잡한 데이터를 표현하다 보면 구조체 안에 또 다른 구조체를 넣어야 할 일이 생깁니다.
예를 들어 학생의 주소 정보나 회사의 직원 정보를 다룰 때 말이죠.

이럴 때 사용하는 것이 중첩 구조체입니다.
즉, 구조체 안에 또 다른 구조체를 멤버로 포함시킬 수 있는 기능입니다.


● 구조체 안에 구조체 선언

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

관련된 데이터를 계층적으로 묶을 수 있어서 코드가 더 읽기 쉽고 유지보수가 쉬워집니다.