C 프로그래밍 언어에서 구조체(structure)의 가장 널리 사용되는 형태는 바로 구조체 배열(array of structures)입니다. 구조체 하나에는 서로 다른 자료형의 데이터를 묶어 담을 수 있고, 이를 배열로 만들면 동일한 형식의 데이터 여러 개를 효율적으로 관리할 수 있습니다.
구조체 배열 선언하기
구조체 배열을 선언하려면 먼저 구조체를 정의한 뒤, 해당 구조체 타입의 배열 변수를 선언하면 됩니다.
struct book b[10]; // 'book' 타입 구조체 배열에 요소 10개 생성
예제: 학생 3명의 정보 다루기
다음은 구조체 배열을 사용해 학생 3명의 정보(학번, 이름, 백분율)를 저장하고 출력하는 C 프로그램입니다.
#include <stdio.h>
#include <string.h>
struct student {
int id;
char name[30];
float percentage;
};
int main() {
int i;
struct student record[3]; // 학생 3명의 레코드를 저장할 배열
// 1번째 학생 정보
record[0].id = 1;
strcpy(record[0].name, "Bhanu");
record[0].percentage = 86.5;
// 2번째 학생 정보
record[1].id = 2;
strcpy(record[1].name, "Priya");
record[1].percentage = 90.5;
// 3번째 학생 정보
record[2].id = 3;
strcpy(record[2].name, "Hari");
record[2].percentage = 81.5;
for(i = 0; i < 3; i++) {
printf(" Records of STUDENT : %d \n", i+1);
printf(" Id is: %d \n", record[i].id);
printf(" Name is: %s \n", record[i].name);
printf(" Percentage is: %f\n\n", record[i].percentage);
}
return 0;
}
참고: 배열의 인덱스는 0부터 시작하므로, 학생 3명의 정보를 저장하려면 배열 크기를 반드시 3 이상으로 선언해야 합니다(record[3]). 크기가 부족한 배열에 접근하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있으니 주의하세요.
실행 결과
위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
Records of STUDENT : 1 Id is: 1 Name is: Bhanu Percentage is: 86.500000 Records of STUDENT : 2 Id is: 2 Name is: Priya Percentage is: 90.500000 Records of STUDENT : 3 Id is: 3 Name is: Hari Percentage is: 81.500000
핵심 정리
구조체 배열은 학생, 도서, 직원 정보처럼 서로 연관된 데이터를 한꺼번에 관리할 때 매우 유용합니다. 각 배열 요소는 독립된 구조체이며, 점(.) 연산자를 사용해 record[i].id, record[i].name과 같이 각 멤버에 손쉽게 접근할 수 있습니다. 반복문과 함께 사용하면 대량의 데이터도 간결한 코드로 처리할 수 있다는 점이 가장 큰 장점입니다.