//1....////////////////////////////////////////
// 매개변수와 지역변수의 범위 개념을 이해하지 못해
// 저지르기 쉬운 실수 (Call by value)
//////////////////////////////////////////////
void swap(int x , int y)
{
int temp = x;
x = y;
y = temp;
}
void main()
{
int x , y;
x = 10;
y = 20;
cout<<"x="<<x<<" y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
}
//결과는 10,20 으로 의도되로 수행되지 않는다.
///////////////////////////////////////////////
//2....////////////////////////////////////////
// C에서 자주 쓰이는
// 포인터를 이용하여 Call by referference 를 연출하는 방식
//////////////////////////////////////////////
void swap(int *x , int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void main()
{
int x , y;
x = 10;
y = 20;
cout<<"x="<<x<<" y="<<y<<endl;
swap(&x,&y);
cout<<"x="<<x<<" y="<<y<<endl;
}
//의도한대로 잘 수행된다
///////////////////////////////////////////////
//3....////////////////////////////////////////
// C++ 에서 사용하는 Call by reference 방식
매게 변수의 복사본을 사용하는 것이 아니라
그 변수 자체를 가져다 쓰는 방식이다.
//////////////////////////////////////////////
void swap(int &x , int &y)
{
int temp = x;
x = y;
y = temp;
}
void main()
{
int x , y;
x = 10;
y = 20;
cout<<"x="<<x<<" y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
}
//의도한대로 잘 수행된다
///////////////////////////////////////////////
ps : 변수의 값이 변경되어야 하는 경우가 아니라도, 념겨주는 매개 변수의 크기가 클 때는 Call by Value방식보다 Call by Reference 방식을 사용하는 것이 효율적이다.
Call by Value 방식은 넘겨진 변수의 복사본을 만들기 때문에 매개변수로 넘어가는 변수의 크기가 크면, 메모리 복사에 시간이 걸릴 수 있습니다. Call by Reference 방식은 복사본을 만들지 않기 때문에 변수를 복사하는데 걸리는 시간을 절약할 수 있다.