정처기 감자정처기 감자
C언어구조체

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 중첩 구조체와 포인터 접근

코딩C언어
읽는데 6분 소요
처음 쓰인 날: 2026-04-24
마지막 수정일: 2026-04-24
조회수: —
선수학습(2개)
  • C언어 구조체
  • C언어 구조체 포인터

요약

C언어 중첩 구조체(구조체 안의 구조체)의 선언·초기화·포인터 접근(p->outer.inner.field)을 다단계로 추적하는 방법을 정리합니다. 정보처리기사 실기 대비 심화 주제로, ->와 .의 차이를 메모리 다이어그램으로 익힙니다.

이 페이지는 기출 출제 이력이 없는 보충 페이지입니다
중첩 구조체(구조체 안의 구조체)는 현재까지 정처기 실기 기출에 등장한 적이 없는 주제입니다. 핵심 기출 범위만 공부하고 싶다면 이 페이지는 건너뛰어도 됩니다. 최근 회차의 출제 범위가 점점 넓어지고 있어 어디서 나올지 예측하기 어렵기 때문에, 혹시 모를 출제에 대비해 추가한 페이지입니다.

아래에서 하나씩 배울 내용을 미리 정리한 표입니다.

개념설명예시
중첩 구조체구조체를 다른 구조체의 멤버로 포함struct Student { struct Date birth; };
중첩 초기화중괄호를 안쪽까지 한 번 더 묶어 초기화{1001, {2025, 3, 19}}
포인터 + . 접근->로 한 번 풀고 이후는 .으로 이어감p->birth.year
3단 이상 중첩.을 계속 이어 붙이면 됨p->info.birth.year

중첩 구조체란?

구조체의 멤버는 int, char, 배열뿐 아니라 다른 구조체도 될 수 있습니다. 이렇게 구조체가 구조체를 품은 형태를 중첩 구조체라고 합니다. 학생 정보에 생년월일(year, month, day)을 같이 담거나, 주소 정보에 도시와 우편번호를 하나로 묶는 것처럼, 하나의 개념 안에 세부 필드가 다시 묶일 때 사용합니다.

c
코드 하이라이팅 중…
중첩 구조체 개념 다이어그램
struct Student 안에 struct Date(birth)가 통째로 들어 있습니다. 박스 안에 박스가 있는 모양으로 생각하면 쉬워요.

Student 박스 안에 id(int)와 함께 birth라는 또 하나의 박스(Date 구조체) 가 통째로 들어 있는 모양입니다. birth는 단일 값이 아니라 year, month, day 3개의 필드를 안에 품은 구조체입니다.

중첩 구조체 변수를 초기화할 때는 중괄호를 안쪽까지 한 번 더 묶어 작성합니다.

c
코드 하이라이팅 중…

바깥 {}는 Student를, 안쪽 {2025, 3, 19}는 birth 멤버(Date)를 채웁니다. Date의 멤버 순서(year, month, day)에 맞춰 값이 들어갑니다.


포인터로 중첩 구조체 접근

구조체 포인터로 중첩 구조체의 멤버에 접근하려면 ->와 .을 섞어서 씁니다.

c
코드 하이라이팅 중…

포인터 단계는 처음 한 번만 ->를 쓰고, 이후 구조체 멤버를 따라갈 때는 전부 .입니다. 연결리스트에서 본 head->n2->n1처럼 ->가 두 번 연속된 것은 n2가 포인터 멤버였기 때문입니다. 반면 아래 예제의 birth는 구조체 값 멤버이므로, 포인터가 아니라 .으로 이어야 합니다.

포인터 멤버 vs 구조체 값 멤버 비교 다이어그램
왼쪽: n2는 포인터 멤버라 다른 박스(노드)로 점프해야 하므로 -> 두 번. 오른쪽: birth는 구조체 값 멤버라 같은 박스 안에 내장돼 있어 -> 한 번 + . 한 번.

핵심은 점프(->)는 포인터를 만났을 때만, 같은 박스 안의 멤버에는 . 라는 원칙입니다.

예제: 학생 + 생년월일

c
코드 하이라이팅 중…

출력: 2025/3/19

단계별로 풀어서 해석하기

s가 주소 100에 있고, 포인터 p가 주소 1000에 있다고 가정합니다.

p->birth.year를 왼쪽부터 한 단계씩 풀어봅시다.

text
코드 하이라이팅 중…

핵심은 p->birth가 반환하는 것이 구조체(값)이지 포인터가 아니라는 점입니다. 그래서 그 다음 단계는 .으로 이어야 합니다.

초기화 {2025, 3, 19}의 순서는 Date의 멤버 순서(year, month, day)와 일치하므로 year=2025, month=3, day=19가 각각 들어갑니다. 같은 1단계/2단계 방식으로 추적하면 p->birth.month는 3, p->birth.day는 19입니다.

중첩 구조체 포인터 메모리 다이어그램
p(주소 1000)에 s의 주소 100이 저장되어 있고, s 안에는 id와 birth(Date 구조체)가 연속으로 놓여 있습니다.
p->birth->year 라고 쓰면 컴파일 에러입니다
birth는 구조체 포인터가 아니라 구조체 자체입니다. 첫 화살표(->) 이후 멤버는 모두 점(.)으로 이어야 합니다. 포인터 단계가 한 번이면 -> 도 한 번입니다.

3단 이상 깊은 중첩

구조체가 또 다른 구조체를 품으면 .을 이어 붙이기만 하면 됩니다. 아래는 Student → Info → Date 순으로 3단 중첩된 예제입니다.

c
코드 하이라이팅 중…

초기화 {2001, {{2005, 6, 15}, 3}}에서 바깥 {}는 Student, 그 안의 {}는 Info, 가장 안쪽 {2005, 6, 15}는 Date를 채웁니다.

p->info.birth.year를 단계별로 추적하면 이렇습니다.

text
코드 하이라이팅 중…
3단 중첩 구조체 포인터 메모리 다이어그램
Student → Info → Date 순으로 중첩된 구조. p->에서 포인터를 한 번 풀고, 이후 .으로 단계별로 파고듭니다.

p에서 포인터를 한 번 풀어낸 뒤로는, 구조체 멤버를 따라가는 동안 .만 사용한다는 원칙은 동일합니다.

연습 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • C언어 연결 리스트 (Linked List)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999