C 프로그래밍에서 구조체 배열(array of structure)은 서로 다른 자료형의 변수들을 하나의 이름 아래 묶어 관리할 수 있게 해주는 강력한 기능입니다. 구조체 내부에 배열을 선언하면 여러 개의 연관된 데이터를 체계적으로 저장하고 처리할 수 있습니다.
구조체 선언의 일반적인 형태
구조체는 다음과 같은 형식으로 선언합니다.
struct tagname{
datatype member1;
datatype member2;
datatype member n;
};여기서 각 요소의 의미는 다음과 같습니다.
struct : 구조체를 정의하는 키워드입니다.
tagname : 구조체의 이름을 지정합니다.
member1, member2 : 구조체를 구성하는 데이터 항목(멤버)들을 나타냅니다.
구조체 내 배열 선언 예시
다음 예제는 C 프로그래밍에서 구조체 내부에 배열을 사용하는 방법을 보여줍니다.
struct book{
int pages;
char author [30];
float price;
};위 코드에서 author[30]처럼 문자 배열을 멤버로 선언하면 최대 30자까지의 저자 이름을 저장할 수 있습니다.
구조체 내 배열 활용 예제 프로그램
다음은 구조체 안에 배열을 선언하고 사용하는 방법을 보여주는 전체 C 프로그램입니다.
#include <stdio.h>
// candidate 구조체 선언
struct candidate {
int roll_no;
char grade;
// 구조체 내부의 배열
float marks[4];
};
// 구조체 변수의 내용을 출력하는 함수
void display(struct candidate a1){
printf("Roll number : %d\n", a1.roll_no);
printf("Grade : %c\n", a1.grade);
printf("Marks secured:\n");
int i;
int len = sizeof(a1.marks) / sizeof(float);
// 구조체 내부 배열의 내용에 접근
for (i = 0; i < len; i++) {
printf("Subject %d : %.2f\n",
i + 1, a1.marks[i]);
}
}
// 메인 함수
int main(){
// 구조체 초기화
struct candidate A= { 1, 'A', { 98.5, 77, 89, 78.5 } };
// 구조체 내용 출력 함수 호출
display(A);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Roll number : 1 Grade : A Marks secured: Subject 1 : 98.50 Subject 2 : 77.00 Subject 3 : 89.00 Subject 4 : 78.50
핵심 포인트 정리
이 예제에서 주목할 부분은 sizeof(a1.marks) / sizeof(float)를 사용해 배열의 길이를 계산한 점입니다. 이렇게 하면 배열 크기가 변경되더라도 반복문을 수정할 필요가 없어 코드의 유지보수성이 높아집니다. 또한 구조체 멤버인 배열에 접근할 때는 점(.) 연산자와 인덱스를 함께 사용하여 a1.marks[i] 형태로 각 요소에 접근합니다.