C언어구조체

검색

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

C언어 구조체 배열

코딩C언어
읽는데 5분 소요
처음 쓰인 날: 2026-03-19
마지막 수정일: 2026-03-21
조회수:
선수학습(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부터 시작하면 배열 인덱스와 헷갈릴 수 있으므로 구분되는 숫자를 씁니다.


관련 글

(41개)
제목태그시험
C언어 형변환 (Casting)
C언어
-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어
-
C언어 사용자 정의 함수 기초
C언어
-