매개변수 전달 방식
매개변수란, 함수에 전달된 값을 저장하고, 함수 안에서만 사용하도록 선언되어 있는 변수로 앞에서도 공부 한 적이 있습니다. 매개변수 전달방식에는 값 전달 방식(Call by Value)과 참조 전달 방식(Call by Reference)이 있습니다.
- 값 전달 방식(Call by Value)
값 전달 방식은 함수를 호출할 경우 메인 함수의 변수를 인자로 호출한 함수에 전달하고, 호출한 함수의 매개변수에 메인 함수의 변수 값을 복사하는 방식입니다. 즉, 같은 변수 x를 선언하고 복사했을때, 같은 x지만 메인 함수의 변수와 호출한 함수의 매개변수는 서로 다른 변수입니다. 아래와 같은 코드를 작성했을 때 x의 값은 몇이나올까요?
------------------------------------------------------------------------------------------
#include <stdio.h>
add(int x);
int main()
{
int x = 10;
add(x);
printf("%d \n", x);
}
add(int x)
{
x = x + 1;
}
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
#include <stdio.h>
add(int a);
int main()
{
int x = 10;
add(x);
printf("%d \n", x);
}
add(int a)
{
a = a + 1;
}
------------------------------------------------------------------------------------------
- 참조 전달 방식(Call by Reference)
------------------------------------------------------------------------------------------
#include <stdio.h>
add(int *a);
int main()
{
int x = 10;
add(&x);
printf("%d \n", x);
}
add(int *a)
{
*a = *a + 1;
}
------------------------------------------------------------------------------------------
결과는 11이 출력됩니다. 참조 전달 방식은 값을 참조하기때문에 main 함수의 x와 *a가 같은값이됩니다.
참조 전달 방식을 이용해 입력한 두 값을 바꾸는 코드를 작성해 봤습니다.
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
위 코드의 결과는 다음 그림과 같습니다.
스타일 C프로그래밍 저.김종훈,김종진 출.WellBook