함수를 호출할 때 단순히 값을 전달하는 형태의 함수 호출을 Call-by-value 라 하고, 메모리의 접근에 사용되는 주소값을 전달하는 형태의 함수 호출을 Call-by-reference라 한다.  배열을 함수의 인자로 전달하는 경우는 배열의 주소값을 전달받으니 Call-by-reference 이다. 

 

#include <stdio.h>

void Swap(int n1, int n2)
{
    int tmp = n1;
    n1 = n2;
    n2 = tmp;
    printf("n1 n2 : %d %d\n", n1, n2);
}

int main(void)
{
    int num1 = 10, num2 = 20;
    printf("num1 num2 : %d %d\n", num1, num2);

    Swap(num1, num2);
    printf("num1 num2 : %d %d\n", num1, num2);
    return 0;
}
/* output : 
num1 num2 : 10 20
n1 n2 : 20 10
num1 num2 : 10 20
*/
#include <stdio.h>

void Swap(int * ptr1, int * ptr2)
{
    int tmp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = tmp;
}

int main(void)
{
    int num1 = 10, num2 = 20;
    printf("num1 num2 : %d %d\n", num1, num2);

    Swap(&num1, &num2);
    printf("num1 num2 : %d %d\n", num1, num2);
    return 0;
}
/* output : 
num1 num2 : 10 20
num1 num2 : 20 10
*/

위 두 코드를 보면 첫 번째 코드는 Call-by-value 방식이고, 두 번째 코드는 Call-by-reference 방식이다. 첫 번째 코드는 값의 변경이 매개변수 n1과 n2에서만 일어나 num1과 num2의 값에는 영향을 미치지 않는다. 매개변수 사이에서만 값의 변환이 일어났다. 두 번째 코드는 주소값을 인자로 받아 주소값에 직접 접근하여 main함수의 num1과 num2의 값도 변경되었다.

'Language > C, C++' 카테고리의 다른 글

[C] 2차원 배열  (0) 2020.12.24
[C] 포인터에서 const 사용  (0) 2020.12.20
[C] 함수 인자로 배열 전달  (0) 2020.12.20
[C] 포인터 배열  (0) 2020.12.19
[C] 문자열 포인터  (0) 2020.12.18

+ Recent posts