Adventure Time - Jake call-by-pointer(return-by-pointer) vs call-by-reference
본문 바로가기
Back-end/c,c++

call-by-pointer(return-by-pointer) vs call-by-reference

by bogyoi 2024. 1. 3.

함수의 호출과 반환에서 포인터를 이용한 인수 전달 방법에 call-by-pointer(return-by-pointer)을 사용할 수 있다.

함수 호출 시 인수값을 복사하지않고, 인수가 저장된 곳의 주소(정보)를 전달하기 때문에 시간 부담이 적으며 메모리 공간 사용도 효율적임. 호출된 함수에서는 포인터를 사용하여 간접참조로 인수 내용을 직접 변경할 수 있음.

 

call-by-reference(return-by-reference)방식의 경우 변수 이름을 직접 사용할 수 있어 &*와 같은 연산자를 별도로 사용하지 않아도 되는 장점이 있다. 

( &: 변수나 함수의 주소를 찾아낼 때 사용, *: 포인터가 가리키고 있는 곳의 값을 읽거나 쓸 때 사용)

 

/// call-by-pointer(return by value) 예시
double average(int *pi, int *pj)
{
        double avg;
        avg= (*pi + *pj)/2.0;
        return avg;
}
int main(int argc, char *argv[])
{
        int x, y;
        double d;
        x = 3;
        y = 5;
        d = average(&x, &y);
        printf("Average: %f\n", d);
        return 0;
}
///call-by-reference 예시
void average(int &i, int &j, double &avg)
{
        avg = (i+j)/2.0;
}
int main(int argc, char *argv[])
{
        int x, y;
        double d;
        x = 3;
        y = 5;
        d = average(x, y, avg);
        printf("Average: %f\n", avg);
        return 0;
}