프로젝트 & 과제/3학년

[C언어] call by value/reference

qqlzzb 2022. 2. 4. 18:41

개요

프로그래밍 언어 : C언어

과제 수행 날짜 : 2020.10.30

과제 개요 : call by value와 call by reference

 

Call by Value

#include <stdio.h>
void swap(int p, int q)
{
    int tmp;
    tmp = p; p = q; q = tmp;
}

int main()
{
    int i = 3, j = 5;
    swap(i,j);
    printf("%d, %d",i,j);
}

call by value 방식에서는 swap 함수로 main 함수의 값을 변경할 수 없다. 왜냐하면 swap 함수에서 인수로 받는 변수가 복사본이기 때문이다. 즉, 인수로 변수의 "값"만 전달하였기 때문에 원본인 변수의 값을 바꿀 수 없다.

Call by Reference

#include <stdio.h>
void swap(int *p, int *q)
{
    int tmp;
    tmp = *p; *p = *q; *q = tmp;
}

int main()
{
    int i = 3, j = 5;
    swap(&i,&j);
    printf("%d, %d",i,j);
}

call by reference 방식에서 swap 함수를 이용하여 main 함수의 값을 변경시킬 수 있는 이유는 swap 함수가 인수로 변수의 주소를 받기 때문이다. swap 함수는 주소를 받았으므로 그 주소에 있는 값을 변경할 수 있고, 따라서 원본의 값도 변경되기 때문에 main 함수의 값을 변경시킬 수 있다. 

call by reference를 이용하기 위해서는 포인터를 사용하면 된다. 변수의 주소를 다른 함수에 넘겨주면 그 함수에서는 포인터를 이용하여 원본 변수의 값을 변경할 수 있다.