C언어 구조체 배열

코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-03-19
마지막 수정일: 2026-03-21
조회수: 824
선수학습(1개)

요약

C언어 구조체 배열의 선언과 초기화, 바깥 중괄호 생략 패턴, 구조체 배열과 포인터 접근 방법을 알아봅니다. 임의 주소를 활용한 메모리 구조 이해와 포인터 추적 방법을 포함합니다.

구조체 배열이란? 쌩기초

구조체배열로 선언할 수 있습니다. 배열의 각 요소가 구조체인 형태입니다.

c
코드 하이라이팅 중...
구조체 배열
구조체 배열은 각 칸에 구조체가 들어있는 배열입니다. students[0], students[1], students[2]로 접근합니다.

임의 주소로 이해하기

시험장에서 구조체 배열 문제를 풀 때, 각 요소에 임의의 주소값을 부여하면 포인터 연산을 쉽게 추적할 수 있습니다.

구조체 배열 메모리 구조
구조체 배열의 메모리 구조. 파란색 숫자는 임의로 정한 주소값입니다.
  • students[0]의 주소를 100, students[1]을 101, students[2]를 102로 정합니다.1
  • 이렇게 주소를 정해두면 p++p+1 같은 포인터 산술을 숫자로 계산할 수 있습니다.

바깥 중괄호 생략 기초

위 코드에서는 각 구조체 요소를 {}로 감쌌지만, C언어에서는 바깥 중괄호를 생략할 수 있습니다. 컴파일러가 구조체의 첫 번째 멤버부터 차례대로 값을 하나씩 채워 넣습니다.

아래는 위 섹션과 다른 구조의 Student를 사용하는 기출 예시입니다:

c
코드 하이라이팅 중...

컴파일러는 멤버 순서대로 값을 채웁니다. 이 Student 구조체가 name, score[3] 순서이므로:

분배 위치이유
"Kim"s[0].name첫 번째 멤버(name)에 대입
{0xA0, 0xA5, 0xDB}s[0].score두 번째 멤버(score 배열)에 대입
"Lee"s[1].names[0]이 다 채워졌으므로 s[1]로 이동
{0xA0, 0xED, 0x81}s[1].scores[1]의 두 번째 멤버에 대입

구조체 배열과 포인터 심화

구조체 배열의 특정 요소를 포인터로 가리킬 수 있습니다. 구조체 변수에 직접 접근할 때는 점(.)을 쓰지만, 포인터를 통해 접근할 때는 화살표(->)를 사용합니다.

c
코드 하이라이팅 중...
구조체 배열 포인터
포인터 p가 구조체 배열의 두 번째 요소(students[1])를 가리킵니다.

임의 주소로 포인터 추적하기

임의 주소를 활용하면 포인터가 어떤 구조체 요소를 가리키는지 명확하게 파악할 수 있습니다.

구조체 배열 포인터와 주소
포인터 p가 주소 101(students[1])을 가리킵니다. 파란색 숫자는 임의 주소값입니다.
  • p = &students[1]이므로 p에는 주소 101이 저장됩니다.
  • p->name은 주소 101에 있는 students[1]의 name 멤버 → "이영희"
  • p->id는 주소 101에 있는 students[1]의 id 멤버 → 1002

포인터에 정수를 더하면 해당 개수만큼 다음 구조체 요소로 이동합니다:

포인터 표현주소 계산가리키는 요소
p101students[1]
p - 1101 - 1 = 100students[0]
p + 1101 + 1 = 102students[2]
c
코드 하이라이팅 중...

정보처리기사 실기 대비 문제


Footnotes

  1. 100부터 시작하는 이유는 편의상입니다. 0부터 시작하면 배열 인덱스와 헷갈릴 수 있으므로 구분되는 숫자를 씁니다.


관련 글

(35개)
제목태그시험
C언어 함수 포인터 (Function Pointer)
C언어
-
C언어 구조체 포인터
C언어
-
C언어 함수 프로토타입
C언어
-