C 언어에서 값 전달과 참조 전달(Call By Value and Call By Reference)

  • 2 minutes to read

C 언어에서 함수에 인자를 전달할 때, 값을 복사하여 전달하는 "값 전달(Call By Value)" 방식과 메모리 주소를 전달하여 원래 변수의 값을 변경하는 "참조 전달(Call By Reference)" 방식이 있습니다. 이번 글에서는 이 두 방식을 사용하는 예제 코드를 살펴보고자 합니다.

우선, 값 전달 방식을 사용하여 변수의 값을 증가시키는 함수 increase_by_12()와 참조 전달 방식을 사용하여 변수의 값을 증가시키는 함수 increase_by_15()를 작성해보았습니다.

코드: call_by_value_and_reference.c

#include <stdio.h>

// 값 전달(Call By Value)을 이용하여 변수의 값을 12 증가시키는 함수
void increase_by_12(int value) 
{
    value += 12;
}

// 참조 전달(Call By Reference)을 이용하여 변수의 값을 15 증가시키는 함수
void increase_by_15(int* value) 
{
    *value += 15;
}

// Entry Point
int main(void) 
{
    int num = 7;

    // 값을 전달하여 num 값을 증가시키는 함수 호출
    increase_by_12(num);

    num++; // num = 8

    printf("값 전달 후 메인 : %d\n", num); // [1] 8

    // 주소를 전달하여 num 값을 증가시키는 함수 호출
    increase_by_15(&num);

    num++; // num = 24

    printf("참조 전달 후 메인 : %d\n", num); // [2] 24

    return 0;
}

위 코드에서 increase_by_12() 함수는 값 전달 방식을 사용하여 value라는 변수에 num의 값을 복사한 후 이를 증가시킵니다. 따라서 num의 값은 증가되지 않습니다.

반면, increase_by_15() 함수는 참조 전달 방식을 사용하여 value라는 변수에 num의 메모리 주소를 전달한 후 이를 증가시킵니다. 따라서 num의 값도 함께 증가됩니다.

위 예제 코드를 실행하면 다음과 같은 결과가 출력됩니다.

값 전달 후 메인 : 8
참조 전달 후 메인 : 24

이번 글에서는 C 언어에서 함수의 인자를 전달하는 두 가지 방식인 값 전달과 참조 전달에 대해 살펴보았습니다. 값 전달 방식은 인자 값을 복사하여 전달하므로 원래 변수의 값을 변경할 수 없다는 단점이 있습니다. 따라서 변수의 값을 변경하려면 참조 전달 방식을 사용해야 합니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com