1. Call by Value 란 무엇인가??
함수의 인자값(매개변수,parameter) 그 자체를 넘겨준다.
이 경우에 함수는 변수의 값을 복사하여 보내게 된다
즉, 값을 변경시킨다 하더라도 호출한 측의 변수는 값이 변경되지 않는다.
[[예제소스 1 - call by value]]
#include <iostream.h> // 헤더파일 정의
void swap (int x, int y); // swap 함수 정의
int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // num1, num2 변수 선언
cout << "[[[call by value 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수를 호출하기 전에 값을 찍는다.
swap(num1,num2); // swap 함수 호출(call by value)
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 후의 값을 찍는다.
return 0; // 리턴값으로 함수 종료
}
void swap (int x, int y) // swap 함수 구현
{
int temp; // swap을 위한 임시변수 선언
cout << "swap 함수에서 swap 하기 전의 값은 x : " << x << " y : " << y << endl;
// swap 하기 전의 값을 찍는다.
temp = x; // x를 임시변수에 넣고
x = y; // y의 값을 x에 넣고
y = temp; // 임시변수의 값을 y에 넣는다.
cout << "swap 함수에서 swap 한 후의 값은 x : " << x << " y : " << y << endl;
// swap 의 결과값을 찍는다.
}
2. Call by Pointer 란 무엇인가??
매개변수의 포인터(주소값)을 넘겨준다.
이 경우에 함수는 변수의 주소값을 얻을 수 있으며 ‘*’ 연산자를 사용하여 호출한 측의 변수값을 변경할 수 있으며 call by adress 라고도 한다.
[[예제소스 2 - call by pointer]]
#include <iostream.h> // 헤더함수 정의
void swap (int *x, int *y); // 함수 정의(포인터로 인자값을 받는다)
int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // 변수에 값 대입
cout << "[[[call by pointer 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// 화면에 값 출력
swap(&num1,&num2); // 포인터 변수의 주소값을 함수 매개변수로 전달
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// 함수호출 후의 값을 화면에 출력한다.
return 0; // 함수 리턴값 끝.
}
void swap (int *x, int *y) // 함수 정의
{
int temp; // 임시변수 선언
cout << "swap 함수에서 swap 하기 전의 값은 *x : " << *x << " *y : " << *y << endl;// swap 하기 전의 값을 화면에 출력
temp = *x; // 임시변수에 포인터 변수 x의 값을 넣고
*x = *y; // 포인터 변수 x에 포인터 변수 y를 넣고
*y = temp; // 임시변수의 값을 포인터 변수 y에 넣는다.
cout << "swap 함수에서 swap 한 후의 값은 *x : " << *x << " *y : " << *y << endl;// swap 한 수의 값을 화면에 출력
}
3. Call by Reference 란 무엇인가??
이 경우에 함수는 호출한 측 변수의 레퍼런스(별칭)를 얻게 된다.
이때는 호출한 쪽의 변수로 초기화된 레퍼런스가 생성된다.
call by value와 call by pointer의 장점을 모두 가질 수 있다.
[[예제소스 3 - call by reference]]
#include <iostream.h> // 헤더함수 정의
void swap (int &x, int &y); // 함수 정의(인자값을 레퍼런스로 변환해서 받는다.)int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // 변수 선언
cout << "[[[call by reference 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 전의 값을 출력하기
swap(num1,num2); // swap 함수 호출(그냥 넘긴다)
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 후의 값을 출력하기
return 0; // 함수 리턴값
}
void swap (int &x, int &y) // 별도 선언하지 않아도 레퍼런스 값을 가진다.
{
int temp; // 임시 변수 선언
cout << "swap 함수에서 swap 하기 전의 값은 x : " << x << " y : " << y << endl;// swap 하기 전의 값을 출력한다.
temp = x; // 임시변수에 x 값을 넣고
x = y; // x변수에 y값을 넣고
y = temp; // y변수에 temp를 넣는다.
cout << "swap 함수에서 swap 한 후의 값은 x : " << x << " y : " << y << endl; // 화면 출력
}
댓글
댓글 쓰기