Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 지역 범위에서 구조체 선언하고 활용하기

구조체(structure)는 서로 다른 데이터 타입을 가진 여러 변수들을 하나의 이름 아래 묶어 놓은 집합입니다. 관련된 데이터를 하나의 단위로 관리할 수 있어 프로그램의 가독성과 유지보수성을 크게 높여 줍니다.

구조체의 주요 특징

  • 대입 연산자(=)를 사용하면 서로 다른 데이터 타입으로 이루어진 구조체의 모든 멤버 값을 같은 타입의 다른 구조체 변수에 한 번에 복사할 수 있습니다.
  • 복잡한 데이터를 다룰 때는 구조체 안에 또 다른 구조체를 정의하는 중첩 구조체(nested structure) 방식이 유용합니다.
  • 함수 호출 시 구조체 전체를 전달하거나, 개별 멤버만 전달하거나, 구조체의 주소를 전달하는 것도 모두 가능합니다.
  • 구조체를 가리키는 구조체 포인터도 생성할 수 있습니다.

구조체 선언 방법

구조체 선언의 일반적인 형식은 다음과 같습니다.

struct tagname {
    datatype member1;
    datatype member2;
    ...
    datatype member n;
};

여기서 struct는 구조체를 정의할 때 사용하는 키워드이며, tagname은 구조체의 이름을 지정합니다. member1, member2 등은 구조체를 구성하는 데이터 항목(멤버)입니다.

예를 들어, 책 정보를 담는 구조체는 다음과 같이 선언할 수 있습니다.

struct book {
    int pages;
    char author[30];
    float price;
};

지역 범위에서의 구조체 예제

다음은 함수 내부(지역 범위)에서 구조체를 선언하고 사용하는 C 프로그램입니다.

#include<stdio.h>

struct {
    char name[20];
    int age;
    int salary;
    char add[30];
} emp1, emp2;

int manager() {
    struct {
        char name[20];
        int age;
        int salary;
        char add[50];
    } manager;

    manager.age = 27;
    if (manager.age > 30)
        manager.salary = 65000;
    else
        manager.salary = 55000;

    return manager.salary;
}

int main() {
    printf("enter the name of emp1:");
    scanf("%s", emp1.name);
    printf("\nenter the add of emp1:");
    scanf("%s", emp1.add);
    printf("\nenter the salary of emp1:");
    scanf("%d", &emp1.salary);

    printf("\nenter the name of emp2:");
    scanf("%s", emp2.name);
    printf("\nenter the add of emp2:");
    scanf("%s", emp2.add);
    printf("\nenter the salary of emp2:");
    scanf("%d", &emp2.salary);

    printf("\nemp1 salary is %d", emp1.salary);
    printf("\nemp2 salary is %d", emp2.salary);
    printf("\nmanager salary is %d", manager());

    return 0;
}

이 예제에서 emp1emp2는 전역 범위에서 선언된 구조체 변수이고, manager() 함수 내부에는 별도의 지역 구조체가 선언되어 있습니다. 이처럼 구조체는 함수 안에서 독립적으로 정의하여 사용할 수 있으며, 해당 함수 내에서만 유효한 지역 범위를 가집니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

enter the name of emp1:hari
enter the add of emp1:hyderabad
enter the salary of emp1:4000
enter the name of emp2:lucky
enter the add of emp2:chennai
enter the salary of emp2:5000
emp1 salary is 4000
emp2 salary is 5000
manager salary is 55000

실행 결과를 보면 직원 두 명의 급여는 사용자 입력값 그대로 출력되고, 매니저의 나이가 30세 이하이므로 조건문에 따라 55,000이 출력되는 것을 확인할 수 있습니다.