callee 피호출자 : 형식 매개 변수 (피호출함수의 매개변수)
caller 호출자 : 실 매개 변수 (함수 호출문의 매개변수)
ex)
void Func(int val); //val 형식매개변수
int main() {
int num = 3;
Func(num); //num 실매개변수
}
주소 값을 인자로 전달하기에 값 변경 시 실 매개 변수의 원본 값이 변경됨
ex)
void func(int *a, int* b) {
*a = 1;
*b = 3;
}
int main() {
int a = 4;
int b = 6;
func(&a, &b);
}
-> a = 1, b = 3
실 매개 변수를 형식 매개 변수에 복사해서 사용
함수가 실행 중에 형식 매개 변수 값이 변경되어도 실 매개 변수 값은 변경되지 않음
ex)
void func(int a, int b) {
a = 1;
b = 3;
}
int main() {
int a = 4;
int b = 6;
func(a, b);
}
-> a = 4, b = 6
실제 매개 변수의 값이 형식 매개 변수로 전달되지 않음
피호출자 함수내 별도의 형식 매개 변수 초기화 과정
ex)
void sub(int x)
{
x = 30;
}
void main()
{
int a = 20;
sub(a);
}
-> a = 30
전달 받는 실제 매개 변수를 그대로 이용함
call by value + call by result
ex)
void func(int x, int y) {
x = x - y;
}
int main() {
int x = 10, y = 5;
func(x, y);
}
-> x = 5, y = 5
1) func함수내에서 call by value가 발생해 x, y에 10, 5가 복사됨
2) 함수 내에서 x = x-y에서 x의 최종 결과값이 저장됨 (call by result)
: 형식 매개 변수의 이름이 사용될 때마다 그에 대응되는 실 매개 변수 자체가 사용된 것으로 간주 - 이름(식별자) 그대로 전달
ex)
void func(int P)
{
++P; // idx가 0이므로 ++A[0];를 의미
idx = 1;
++P; // idx가 1이므로 ++A[1];를 의미
}