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

 

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

 

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

#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`의 값도 함께 증가됩니다.

 

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

```output

값 전달 후 메인 : 8

참조 전달 후 메인 : 24

```

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

 

끝.

 

Comments


Comments are closed