본문 바로가기
c언어

c언어 구조체의 배열에 대하여 알아보기

by 개발자 L 2023. 1. 29.
반응형

c언어 구조체의 배열에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 구조체의 배열에 대하여 알아보는 시간을 가져보도록 하겠습니다.

우리가 구조체를 쓰면 여러 개의 자료형을 한 번에 묶어서 저장이 가능하다는 것을 알 수 있었습니다.

하지만, 실제로 우리가 프로그램을 만들게 되면 절대로 한 개의 데이터만을 가지고서 처리를 하지 않죠?
그렇기 때문에 다수의 데이터를 저장을 해야만 하는데,

그럴 경우에 구조체 배열을 사용을 하게 됩니다.

그럼 이를 어떻게 사용을 하는지 지금부터 알아보도록 하겠습니다.

 

1. 구조체 배열의 선언

구조체 배열은 우리가 일반적으로 사용을 하는 배열을 선언하는 것과 매우 비슷합니다.

다만, 구조체이기 때문에 앞에 struct가 붙는다는 것이 다른 점입니다.

선언은 이런 식으로 합니다.

struct student
{
    int number;
    char name[50];
    double grade;
};

struct student list[100];

이렇게 선언을 하게 되면 구조체의 형태를 가진 student라는 데이터를 최대 100개까지 받을 수 있게 됩니다.

 

1 - 1. 구조체 배열에 값 저장하기

이번에는 구초제 배열에 값을 저장을 해보도록 하겠습니다.

인덱스 넘버가 2인 곳, 다시 말해 3번째 자리에 값을 저장을 해보도록 하겠습니다.

저장을 하는 방법은 이렇습니다.

list[2].number = 25;
strcpy(list[2].name, "홍길동");
list[2].grade = 3.5;

이렇게 사용을 할 수 있습니다.

구조체이기 때문에 구조체 연산자를 꼭 써야 하고,

구조체 내에 있는 문자열의 값을 저장할 때는 'strcpy()' 함수를 꼭 써야 합니다.

반응형

 

2. 구조체 배열의 초기화

구조체 배열 역시 배열이기 때문에 초기화가 가능합니다.

초기화 하는 방법은 이러합니다.

struct student list[3] = {
    {1, "Kim", 3.2},
    {2, "Lee", 4.1},
    {3, "Park", 2.5}
};

이런 식으로 초기화를 합니다.

형태가 2차원 배열과 비슷하지만 약간 다르죠?
여기서도 주의를 할 점이 있다면,

2차원 배열을 초기화할 때처럼 어떤 데이터를 초기화를 하면 그다음 데이터를 입력하기 전에 꼭 콤마를 붙여야 하며,

제일 마지막 값이 초기화가 되면 그 값 뒤에는 콤마를 붙이지 않는다는 것입니다.

그리고 구조체이기 때문에 구조체 안에 선언된 자료형의 순서에 맞게 선언을 해야 하고,

구조체 자체가 하나의 묶음이기 때문에 세트인 값들은 반드시 중괄호로 묶어주셔야 에러가 나지 않습니다.

그럼 이를 가지고서 한 번 직접 실습을 해보도록 하겠습니다.

#include <stdio.h>

#define SIZE 3

struct student
{
    int number;
    char name[50];
    double grade;
};

int main()
{
    struct student list[SIZE];

    int i;

    for(i = 0; i < SIZE; i++)
    {
        printf("학번을 입력하세요 : ");
        scanf("%d", &list[i].number);
        printf("이름을 입력하세요 : ");
        scanf("%s", list[i].name);
        printf("학점을 입력하세요 : ");
        scanf("%lf", &list[i].grade);
    }

    for(i = 0; i < SIZE; i++)
    {
        printf("이름 : %s, 학점 : %lf\n", list[i].name, list[i].grade);
    }

    return 0;
}

이렇게 학번, 이름, 학점을 직접 입력한 후에 이름과 학점을 입력 순서에 따라 출력하는 프로그램을 작성을 해보았습니다.

그럼 결과를 보도록 하겠습니다.

학번을 입력하세요 : 20230001
이름을 입력하세요 : 김유신
학점을 입력하세요 : 2.3
학번을 입력하세요 : 20230002
이름을 입력하세요 : 이성계
학점을 입력하세요 : 3.5
학번을 입력하세요 : 20230003
이름을 입력하세요 : 홍길동
학점을 입력하세요 : 4.1
이름 : 김유신, 학점 : 2.300000
이름 : 이성계, 학점 : 3.500000
이름 : 홍길동, 학점 : 4.100000

결과 역시 잘 나온 것을 확인할 수 있습니다.

 

여기까지 구조체 배열에 대하여 알아보았는데요,

다음 포스팅에서는 구조체에서 사용되는 포인터에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글