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

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

C 언어에서는 구조체 전체가 아니라 필요한 개별 멤버만 골라 함수의 인수로 전달할 수 있습니다. 이 방식은 함수가 특정 데이터만 필요로 할 때 유용하며, 코드의 의도도 더 명확하게 드러납니다.

개별 멤버 전달 방식의 특징

  • 함수 호출 시 각 멤버가 하나의 인수로 개별적으로 전달됩니다.
  • 함수 헤더(매개변수 목록)에서는 이 값들이 일반 변수에 독립적으로 수신됩니다.

예제 코드

다음 예제는 학생 3명의 세 과목 점수를 입력받고, 구조체의 개별 멤버를 함수에 전달하여 총점을 계산해 출력합니다.

#include <stdio.h>

// 구조체 선언 //
struct student {
    int s1, s2, s3;   // 과목별 점수
} s[5];

// 개별 멤버를 인수로 받아 총점을 출력하는 함수 //
void addition(int a, int b, int c) {
    int sum;
    sum = a + b + c;              // 산술 연산
    printf("총점 = %d\n", sum);
}

int main(void) {
    int i;

    // 반복문으로 사용자 입력 받기 //
    for (i = 1; i < 4; i++) {
        printf("학생 %d의 과목 1 점수 입력 = ", i);
        scanf("%d", &s[i].s1);

        printf("학생 %d의 과목 2 점수 입력 = ", i);
        scanf("%d", &s[i].s2);

        printf("학생 %d의 과목 3 점수 입력 = ", i);
        scanf("%d", &s[i].s3);

        // 구조체의 개별 멤버를 인수로 전달하며 함수 호출 //
        addition(s[i].s1, s[i].s2, s[i].s3);
    }
    return 0;
}

실행 결과

학생 1의 과목 1 점수 입력 = 40
학생 1의 과목 2 점수 입력 = 50
학생 1의 과목 3 점수 입력 = 60
총점 = 150
학생 2의 과목 1 점수 입력 = 70
학생 2의 과목 2 점수 입력 = 80
학생 2의 과목 3 점수 입력 = 90
총점 = 240
학생 3의 과목 1 점수 입력 = 30
학생 3의 과목 2 점수 입력 = 45
학생 3의 과목 3 점수 입력 = 55
총점 = 130

코드 설명

addition(s[i].s1, s[i].s2, s[i].s3)처럼 호출하면 구조체 배열 s의 i번째 요소가 가진 세 개의 정수 멤버 값이 각각 함수의 매개변수 a, b, c에 복사됩니다. 즉, 함수 내부에서는 구조체 자체가 아니라 단순한 int 값 세 개만 다루게 됩니다.

정리

  • 개별 멤버 전달은 값 복사(call by value) 방식으로 동작하므로, 함수 안에서 값을 바꿔도 원본 구조체에는 영향이 없습니다.
  • 반면 멤버 수가 많거나 구조체 전체가 필요한 경우에는 구조체 포인터 또는 구조체 자체를 전달하는 편이 더 효율적입니다.