프로그래밍 언어/C언어

call by value vs call by reference

원원 2020. 7. 7. 22:10

안녕하세요 오늘은 call by value vs call by reference 에 대해 알아보겠습니다

구글이나 네이버에 call by value vs call by reference를 검색하면 수천개의 글들이 나옵니다

그 만큼 중요한 내용입니다


call by value와 call by reference를 굳이 비교하는 이유는 함수를 작성할때 중요합니다


어떤 함수를 호출할때 매개변수로 int형 변수를 넘긴다고하고, +1를 한다고 해봅시다



1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h> 
 
int upupup(int a)
{
    a+=1;
}
 
int main(void) 
{ 
    int value = 0;
    upupup(value);
    
    printf("value : %d ",value);
}


결과값

value : 0


11번줄에서 value를 매개변수로 넣으면 값이 복사가 됩니다

그래서 5번째줄에 a가 1이되고 value는 그냥 여전히 0이 됩니다

이러한것을 call by value라고 합니다







1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h> 
 
int upupup(int* a)
{
    *a +=1 ;
}
 
int main(void) 
{ 
    int value = 0;
    upupup(&value);
    
    printf("value : %d ",value);
}


11번째줄에서 value의 주솟값을 넘깁니다

3번째줄에서 value의 주솟값을 a에 저장합니다

5번째줄에서 a가 가리키는 값(value)을 1 증가시킵니다


이러한 것을 call by reference라고 합니다




결론 ; call by value는 함수에서 값을 전달할 때 전달인자의 값을 매개변수에 저장해서 사용하는 것이고,

call by reference는 함수에서 값을 전달할 때 전달인자의 주소를 매개변수에 저장해서 사용하는 것이다




참고 : 전달인자 vs 매개변수 차이 

https://wowon.tistory.com/101