어떤 조직에 10명의 구성원이 있고 우리는 이들의 이름, 나이, 혈액형을 조사하여 데이터로 저장해두고 싶어요. 일반적인 변수를 사용하는 가장 간단한 방법은 다음의 형식으로 저장하는 형태일겁니다.

//구성원1
char name1[10] = "John";
int age1 = 20;
char blood_type1 = "B";

//구성원2
char name2[10] = "Jerry";
int age2 = 31;
char blood_type2 = "O";

한 명 한 명의 데이터별로 모두 변수를 지정하여 값을 저장했습니다.

하지만 이런 묶음 데이터를 간편하게 저장할 수 있는 자료구조가 있습니다.

구조체란 여러개의 자료형을 묶어서 만든 하나의 그룹화된 자료형입니다.

아까 예시로 든 자료를 구조체를 사용해서 표현해 보겠습니다.

#include <stdio.h>
#include <string.h>

struct person // struct 선언자를 사용하여 person이라는 자료형 정의
{
    char name[10];
    int age;
    char blood_type;
}

int main(void)
{    
    struct person per1, per2; //person 타입의 두 변수 per1, per2 선언

    per1.name = "John"; //per1의 name 멤버에 John 이라는 문자열 저장
    per1.age = 20; // per1의 age 멤버에 접근하여 20 저장
    per1.blood_type = 'B'; //per1의 blood_type 멤버에 'B' 저장

    per2.name = "Jerry";
    per2.age = 31;
    per2.blood_type = 'O';

    printf("%2s %2d %2c", per1.name, per1.age, per1.blood_type);
    printf("%2s %2d %2c", per2.name, per2.age, per2.blood_type);

    return 0;
}

실행결과

John 20  B

Jerry 31  O

계속하려면 아무 키나 누르십시오…

위에서 우리는 person이라는 새로운 구조체 자료형을 정의했습니다. 구조체는 C언어에서 제공하는 기본자료형은 아니지만 하나의 새로운 자료형처럼 사용이 가능하다고해서 사용자 정의 자료형(User Defined Data Type) 이라고 합니다.

per1과 per2는 person 자료형이기 때문에 3개의 멤버에 대해서 데이터를 저장할 수 있습니다. 다만 한 가지 주의할 것은 잘료형 앞에 struct를 붙여서 선언해주어야 합니다. struct person per1 혹은 struct person per2 처럼 말입니다.

image

struct

앞에 보았던 것처럼 구조체를 정의한다는 것은 새로운 자료형을 정의하는 것입니다.

구조체 변수는 기본 자료형과 동일하게 선언과 동시에 초기화 시킬수도 있습니다.

#include <stdio.h>

struct person
{
    char name[10];
    int age;
    char blood_type;
}
int main(void)
{
    struct person per1 = {"John", 20, 'B'};
    struct person per2 = {"Jerry", 31, 'O'};

    printf("%2s %2d %2c", per1.name, per1.age, per1.blood_type);
    printf("%2s %2d %2c", per2.name, per2.age, per2.blood_type);

    return 0;
}

실행결과

John 20 B

Jerry 31 O

계속하려면 아무 키나 누르십시오…

구조체변수는 일반 변수와 동일하게 사용 가능합니다. 배열의 원소가 될 수도있고, 주소를 포인터변수에 저장할 수도 있습니다.

'프로그래밍 언어 > C' 카테고리의 다른 글

(C언어) 40 - typedef 선언  (0) 2020.05.14
(C언어) 39 - 구조체(2)  (0) 2020.05.14
(C언어) 37 - 버퍼(Buffer)  (0) 2020.05.14
(C언어) 36 - string  (0) 2020.05.14
(C언어) 35 - 문자열 입출력 함수들  (0) 2020.05.14

+ Recent posts