함수를 호출할 때 단순히 값을 전달하는 형태의 함수 호출을 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 |