[PL] 매개변수 구현 방법

Jimin·2022년 5월 23일
0

callee 피호출자 : 형식 매개 변수 (피호출함수의 매개변수)
caller 호출자 : 실 매개 변수 (함수 호출문의 매개변수)
ex)

void Func(int val); //val 형식매개변수

int main() {
    int num = 3;
    Func(num); //num 실매개변수
}

1. call-by-reference

주소 값을 인자로 전달하기에 값 변경 시 실 매개 변수의 원본 값이 변경됨
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

2. call-by-value

실 매개 변수를 형식 매개 변수에 복사해서 사용
함수가 실행 중에 형식 매개 변수 값이 변경되어도 실 매개 변수 값은 변경되지 않음
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

3. call by result

실제 매개 변수의 값이 형식 매개 변수로 전달되지 않음
피호출자 함수내 별도의 형식 매개 변수 초기화 과정
ex)

void sub(int x)
{
    x = 30;
}
 
void main()
{
    int a = 20;
    sub(a);
}

-> a = 30

4. call by value-result

전달 받는 실제 매개 변수를 그대로 이용함
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)

5. call by name

: 형식 매개 변수의 이름이 사용될 때마다 그에 대응되는 실 매개 변수 자체가 사용된 것으로 간주 - 이름(식별자) 그대로 전달
ex)

void func(int P)
{
     ++P; // idx가 0이므로 ++A[0];를 의미
     idx = 1;
     ++P; // idx가 1이므로 ++A[1];를 의미
}

0개의 댓글