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

C 언어에서 구조체 주소를 함수 인수로 전달하는 방법

C 언어에서는 구조체 변수 자체를 복사해 전달하는 대신, 구조체의 주소(포인터)를 함수의 인수로 넘기는 방식을 자주 사용합니다. 이 방식은 다음과 같이 동작합니다.

  • 호출하는 쪽에서 구조체의 주소를 함수의 인수로 전달합니다.
  • 함수 선언부(헤더)에서는 이 주소를 구조체 포인터로 받아 처리합니다.

구조체 주소 전달 방식의 장점

  • 메모리 낭비가 없습니다. 값에 의한 호출(Call by Value)처럼 구조체 전체를 복사할 필요가 없어, 큰 구조체를 다룰 때 특히 효율적입니다.
  • 값을 다시 반환할 필요가 없습니다. 함수 내부에서 포인터를 통해 원본 구조체에 간접적으로 접근할 수 있으므로, 함수 안에서 수정한 내용이 그대로 반영됩니다.

예제 코드

다음 예제는 날짜 정보를 담는 구조체의 주소를 display() 함수에 전달하고, 포인터 연산자(->)를 사용해 각 멤버에 접근하여 출력합니다.

#include<stdio.h>
struct date{
    int day;
    int mon;
    int yr;
};
main (){
    struct date d= {02,01,2010};
    display (&d);
    getch ();
}
display (struct date *dt){
    printf("day = %d\n", dt->day);
    printf("month = %d\n",dt->mon);
    printf("Year = %d",dt->yr);
}

실행 결과

day = 2
month = 1
Year = 2010

핵심 정리

위 코드에서 display(&d)는 구조체 변수 d의 주소를 전달하며, 함수 매개변수 struct date *dt가 이를 받습니다. 이후 dt->day, dt->mon, dt->yr처럼 화살표 연산자(->)를 사용해 구조체 멤버에 접근할 수 있습니다. 이처럼 주소를 전달하면 구조체 복사 오버헤드 없이 원본 데이터를 직접 조작할 수 있다는 것이 가장 큰 장점입니다.