53.1 구조체 배열 선언하기

구조체 배열은 변수 이름 뒤에 [ ] (대괄호)를 붙인 뒤 크기를 설정합니다.

  • struct 구조체이름 변수이름[크기];

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

struct_array.c

#include <stdio.h>

struct Point2D {
    int x;
    int y;
};

int main()
{
    struct Point2D p[3];    // 크기가 3인 구조체 배열 생성

    p[0].x = 10;    // 인덱스로 요소에 접근한 뒤 점으로 멤버에 접근
    p[0].y = 20;
    p[1].x = 30;
    p[1].y = 40;
    p[2].x = 50;
    p[2].y = 60;

    printf("%d %d\n", p[0].x, p[0].y);    // 10 20
    printf("%d %d\n", p[1].x, p[1].y);    // 30 40
    printf("%d %d\n", p[2].x, p[2].y);    // 50 60

    return 0;
}

실행 결과

10 20
30 40
50 60

struct Point2D p[3];과 같이 struct 키워드와 구조체 이름으로 구조체 변수를 선언하면서 [ ] (대괄호)안에 크기를 넣어주면 배열로 선언할 수 있습니다.

구조체 배열에서 각 요소에 접근하려면 배열 뒤에 대괄호를 사용하며 대괄호 안에 인덱스를 지정해주면 됩니다. 이 상태에서 다시 멤버에 접근하려면 . (점)을 사용합니다. 즉, p[0].x는 구조체 배열의 첫 번째 요소에서 멤버 x에 접근한다는 뜻입니다.

  • 배열[인덱스].멤버
그림 53‑1 구조체 배열
참고 | 구조체 배열을 선언하는 동시에 초기화하기

구조체 배열을 선언하면서 초기화하려면 { } (중괄호)안에 중괄호를 사용합니다.

  • struct 구조체이름 변수이름[크기] = { { .멤버이름1 = 값1, .멤버이름2 = 값2 },
                                                                { .멤버이름1 = 값3, .멤버이름2 = 값4 } };
  • struct 구조체이름 변수이름[크기] = { { 값1, 값2 }, { 값3, 값4 } };

다음과 같이 구조체 배열의 각 요소를 중괄호로 묶은 뒤 콤마로 구분해주면 됩니다.

struct_array_init.c

#include <stdio.h>

struct Point2D {
    int x;
    int y;
};

int main()
{
    // 구조체 배열을 선언하면서 초기화
    struct Point2D p1[3] = { { .x = 10, .y = 20 }, { .x = 30, .y = 40 }, { .x = 50, .y = 60 } };

    printf("%d %d\n", p1[0].x, p1[0].y);    // 10 20
    printf("%d %d\n", p1[1].x, p1[1].y);    // 30 40
    printf("%d %d\n", p1[2].x, p1[2].y);    // 50 60

    // 구조체 배열을 선언하면서 초기화
    struct Point2D p2[3] = { { 10, 20 }, { 30, 40 }, { 50, 60 } };

    printf("%d %d\n", p2[0].x, p2[0].y);    // 10 20
    printf("%d %d\n", p2[1].x, p2[1].y);    // 30 40
    printf("%d %d\n", p2[2].x, p2[2].y);    // 50 60

    return 0;
}

만약 모든 요소의 멤버를 0으로 초기화하고 싶다면 구조체 배열을 선언하면서 { 0, }을 할당하면 됩니다.

struct Point2D p[3] = { 0, };    // 구조체 배열을 선언하면서 0으로 초기화