C 언어에서는 구조체(structure) 전체를 함수의 인자(argument)로 전달할 수 있습니다. 이는 값에 의한 전달(pass by value) 방식으로 동작하며, 다음과 같은 특징이 있습니다.
함수를 호출할 때 구조체 변수의 이름을 그대로 인자로 전달합니다.
함수 정의부(헤더)에서는 같은 구조체 타입의 또 다른 매개변수로 이 값을 받아 처리합니다.
단점
구조체 전체가 통째로 복사되기 때문에, 크기가 큰 구조체를 자주 전달하면 메모리 낭비와 성능 저하가 발생할 수 있습니다. 이러한 문제를 피하려면 구조체의 주소(포인터)를 전달하는 방식을 사용하는 것이 효율적입니다.
예제 프로그램
다음 프로그램은 두 개의 정수를 멤버로 가지는 구조체를 선언하고, 구조체 전체를 함수에 전달하여 두 값의 합을 출력하는 예제입니다.
#include<stdio.h>
// 구조체 선언 //
struct add {
int var1;
int var2;
}a;
// 함수 선언 및 정의 //
void show(struct add a) {
// 합계를 저장할 변수 선언 //
int sum;
// 산술 연산 수행 //
sum = a.var1 + a.var2;
// 결과 출력 //
printf("Added value is %d", sum);
}
void main() {
// 구조체 변수 선언 //
struct add a;
// 사용자 입력 받기 //
printf("Enter variable 1 = ");
scanf("%d", &a.var1);
printf("Enter variable 2 = ");
scanf("%d", &a.var2);
// 함수 호출 //
show(a);
}
실행 결과
Enter variable 1 = 30 Enter variable 2 = 40 Added value is 70