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

C언어 구조체의 개별 멤버를 함수 인수로 전달하는 방법

C 언어에서 구조체의 값을 한 함수에서 다른 함수로 전달하는 방법에는 크게 세 가지가 있습니다.

  • 개별 멤버를 함수의 인수(argument)로 전달
  • 구조체 전체를 함수의 인수로 전달
  • 구조체의 주소를 함수의 인수로 전달

이 글에서는 그중 첫 번째 방법인 구조체의 개별 멤버를 함수의 인수로 전달하는 방법을 자세히 살펴보겠습니다.

개별 멤버 전달의 기본 원리

  • 함수를 호출할 때 구조체의 각 멤버를 하나씩 인수로 넘겨줍니다.
  • 함수 쪽에서는 이 값들을 일반 변수(매개변수)로 독립적으로 받아 처리합니다.

즉, 함수 입장에서는 구조체를 전달받는 것이 아니라 단순한 일반 변수를 전달받는 것과 동일하게 동작합니다.

예제 1: 날짜 구조체의 멤버 전달

다음은 구조체의 개별 멤버를 함수에 전달하는 방법을 보여주는 C 프로그램입니다.

#include<stdio.h>
struct date{
    int day;
    int mon;
    int yr;
};
main ( ){
    struct date d = {02, 01, 2010}; // 구조체 변수 선언 및 초기화
    display(d.day, d.mon, d.yr); // 개별 멤버를 함수의 인수로 전달
    getch ( );
}
display(int a, int b, int c){
    printf("day = %d\n", a);
    printf("month = %d\n", b);
    printf("year = %d\n", c);
}

실행 결과

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

day = 2
month = 1
year = 2010

예제 2: 학생 정보 구조체의 멤버 전달

이번에는 학생 정보를 담은 구조체의 멤버들을 함수로 전달하는 또 다른 예제입니다. 여기서는 전역(global)으로 선언된 구조체 변수를 사용한다는 점에 주목하세요.

#include <stdio.h>
#include <string.h>
struct student{
    int id;
    char name[20];
    float percentage;
    char temp;
};
struct student record; // 구조체 변수의 전역 선언
int main(){
    record.id = 1;
    strcpy(record.name, "Raju");
    record.percentage = 86.5;
    structure_demo(record.id, record.name, record.percentage); // 개별 멤버 전달
    return 0;
}
void structure_demo(int id, char name[], float percentage){
    printf(" Id is: %d \n", id);
    printf(" Name is: %s \n", name);
    printf(" Percentage is: %.2f \n", percentage);
}

실행 결과

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

Id is: 1
Name is: Raju
Percentage is: 86.50

정리

구조체의 개별 멤버를 함수로 전달하면 필요한 데이터만 선택적으로 넘길 수 있어 효율적입니다. 다만 멤버 수가 많아지면 인수 목록이 길어져 코드가 복잡해질 수 있으므로, 이런 경우에는 구조체 전체를 전달하거나 구조체의 주소(포인터)를 전달하는 방식이 더 유용할 수 있습니다.