본문 바로가기
프로그래밍/C

[C] 8. C언어의 "구조체"

by iwbap 2024. 6. 13.
728x90

C 언어 학습: 구조체

C 언어에서 구조체(struct)는 여러 변수를 하나의 복합 데이터 타입으로 묶어주는 기능을 제공합니다. 이번 글에서는 구조체 정의와 사용, 구조체 배열, 구조체와 포인터, 공용체와 열거형에 대해 알아보겠습니다.


1. 구조체 정의와 사용

구조체는 관련된 변수들을 하나의 단위로 묶어서 관리할 수 있게 해줍니다. 구조체를 정의하고 사용하는 방법은 다음과 같습니다.

[c]
#include <stdio.h>

// 구조체 정의
struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    // 구조체 변수 선언 및 초기화
    struct Person person1;
    
    // 구조체 멤버에 값 할당
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.height = 165.5;

    // 구조체 멤버 값 출력
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f\n", person1.height);

    return 0;
}
 

위의 예제에서 struct Person은 이름, 나이, 키를 포함하는 구조체입니다. person1이라는 구조체 변수를 선언하고, 각 멤버에 값을 할당한 후 출력합니다.


2. 구조체 배열

구조체 배열은 여러 개의 구조체를 배열 형태로 저장할 수 있게 해줍니다. 이를 통해 동일한 타입의 여러 구조체를 효율적으로 관리할 수 있습니다.

[c]
#include <stdio.h>

// 구조체 정의
struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    // 구조체 배열 선언
    struct Person people[3];

    // 구조체 배열 초기화
    strcpy(people[0].name, "Alice");
    people[0].age = 30;
    people[0].height = 165.5;

    strcpy(people[1].name, "Bob");
    people[1].age = 25;
    people[1].height = 175.0;

    strcpy(people[2].name, "Charlie");
    people[2].age = 28;
    people[2].height = 180.0;

    // 구조체 배열 값 출력
    for (int i = 0; i < 3; i++) {
        printf("Name: %s, Age: %d, Height: %.2f\n", people[i].name, people[i].age, people[i].height);
    }

    return 0;
}
 

위의 예제에서 people은 Person 구조체의 배열입니다. 각 배열 요소에 값을 할당하고, for 문을 사용하여 출력합니다.


3. 구조체와 포인터

구조체 포인터는 구조체를 가리키는 포인터로, 이를 통해 구조체의 멤버에 접근할 수 있습니다. 구조체 포인터를 사용하는 방법은 다음과 같습니다.

[c]
 
#include <stdio.h>

// 구조체 정의
struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    // 구조체 변수 선언 및 초기화
    struct Person person1;
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.height = 165.5;

    // 구조체 포인터 선언 및 초기화
    struct Person *ptr = &person1;

    // 구조체 포인터를 통한 멤버 접근
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);
    printf("Height: %.2f\n", ptr->height);

    return 0;
}
 

위의 예제에서 struct Person *ptr은 person1 구조체를 가리키는 포인터입니다. ptr->name과 같이 화살표 연산자(->)를 사용하여 구조체의 멤버에 접근합니다.


4. 공용체와 열거형

공용체(union)와 열거형(enum)은 C 언어에서 특별한 데이터 타입을 정의하는 데 사용됩니다.

 

 

- 공용체 : 동일한 메모리 공간을 공유하는 여러 멤버를 정의할 수 있습니다. 공용체의 크기는 가장 큰 멤버의 크기로 결정됩니다.

[c]
 
#include <stdio.h>

// 공용체 정의
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    // 공용체 변수 선언 및 초기화
    union Data data;
    data.i = 10;
    printf("data.i: %d\n", data.i);
    data.f = 220.5;
    printf("data.f: %.2f\n", data.f);
    strcpy(data.str, "Hello");
    printf("data.str: %s\n", data.str);

    return 0;
}
 
 
 

- 열거형 : 상수에 이름을 부여하여 코드의 가독성을 높이는 데 사용됩니다.

[c]
 
#include <stdio.h>

// 열거형 정의
enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};

int main() {
    // 열거형 변수 선언
    enum Weekday today;
    today = Wednesday;
    printf("Today is day number: %d\n", today);

    return 0;
}
 

위의 예제에서 enum Weekday는 일주일의 각 요일을 상수로 정의합니다. today 변수에 Wednesday 값을 할당하고 출력합니다.


이번 글에서는 C 언어의 구조체와 관련된 개념들에 대해 알아보았습니다. 구조체, 공용체, 열거형을 통해 복잡한 데이터를 효율적으로 관리할 수 있습니다. 다음 시간에는 파일 입출력에 대해 자세히 다뤄보겠습니다. C 언어 학습에 많은 도움이 되길 바랍니다. Happy Coding!

728x90