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

C 언어 참조에 의한 호출(Call by Reference)이란? 개념부터 예제까지

C 언어에서 참조에 의한 호출(Call by Reference)이란?

참조에 의한 호출(Pass by Reference)은 함수를 호출할 때 값 자체가 아니라 변수의 주소(address)를 인수로 전달하는 방식을 말합니다.

참조에 의한 호출 방식에서는 실제 인수(actual argument)의 주소가 함수의 형식 매개변수(formal parameter), 즉 포인터 변수에 전달됩니다. 함수 내부에서는 이 주소를 사용하여 원본 변수에 직접 접근할 수 있으며, 따라서 함수 안에서 값을 변경하면 호출한 쪽의 원본 변수 값도 함께 변경됩니다.

주요 특징

  • 함수 호출 시 변수의 주소값(&)을 인수로 전달합니다.
  • 형식 매개변수는 반드시 포인터(*)로 선언해야 합니다.
  • 함수 내부에서는 역참조 연산자(*)를 사용해 원본 값에 접근하고 수정할 수 있습니다.
  • 값에 의한 호출(Call by Value)과 달리 원본 데이터가 변경될 수 있습니다.

예제 코드: 두 수 교환(Swap)

다음 예제는 참조에 의한 호출을 이용해 두 변수의 값을 서로 교환하는 프로그램입니다.

#include<stdio.h>
void main(){
    void swap(int *,int *);
    int a,b;
    printf("enter 2 numbers");
    scanf("%d%d",&a,&b);
    printf("Before swapping a=%d b=%d",a,b);
    swap(&a, &b); // 주소값을 인수로 전달
    printf("after swapping a=%d, b=%d",a,b);
    getch();
}
void swap(int *a,int *b){
    int t;
    t=*a;
    *a=*b; // *a = (*a + *b) – (*b = * a);
    *b=t;
}

실행 결과

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

enter 2 numbers 10 20
Before swapping a=10 b=20
After swapping a=20 b=10

코드 설명

swap(&a, &b)처럼 변수 앞에 주소 연산자(&)를 붙여 각 변수의 메모리 주소를 함수에 전달합니다. swap 함수는 포인터 매개변수 int *aint *b를 통해 전달받은 주소에 저장된 실제 값에 접근하여 두 값을 교환합니다.

그 결과, 함수가 종료된 후에도 main 함수의 변수 ab의 값이 10과 20에서 20과 10으로 서로 바뀌어 있는 것을 확인할 수 있습니다. 이것이 바로 참조에 의한 호출의 핵심 동작 원리입니다.