함수호출-값에 의한 호출(Call-by-Value)


 일반적인 함수호출의 예를들면 다음과 같다.

  결과 : 


 input1과 input2를 add함수의 a, b에 전달하고 실행시키는 과정을 함수의 호출이라고 한다. 

 위와같이 그냥 input이라는 값만 함수에 전달하는 방법을 값에 의한 호출(Call-by-Value)라고 한다.

값에 의한 호출(Call-by-Value)이라는 호출방식은 일반적으로 쓰인다. 하지만 다음과 같은 소스에서는 적합하지 않다.


-값에 의한 호출(Call-by-Value)의 한계

  결과 : 


위 소스는 print할때 input의 값을 서로 바꾸어 출력하기 위해 만든 소스이다. 하지만 결과 값은 이상하게도 input이 서로 바뀌지 않았다.

그 이유는 당연하다. 왜냐하면 input의 값만 함수에 전달했기 때문에 실제 input의 값이 바뀌는 것이 아니고 change라는 함수안의 input의 값만 바뀌었기 때문이다. 따라서 이런 경우에 원하는 대로 출력을 시킬려면 값에 의한 호출(Call-by-Reference) 이라는 방법을 사용해야 한다.

이 방법을 써서 다시 소스를 고쳐짜면 다음과 같다.



함수호출-참조에 의한 호출(Call-by-Reference)


 결과 : 


빨간색 밑줄친 부분을 추가했더니 원하는 대로 값이 서로 바뀌어 나오는 것을 볼 수가 있다.

 위에 추가한 빨간색 밑줄을 설명하자면 함수를 호출할때 input이라는 값만 주는것이 아니라 input자체의 주소를 전달함으로서 input의 실제 값을 참조할 수 있게 되는 것이다.

 다시 말하자면 change라는 함수를 호출할때 input의 주소값을 전달하고 change함수에서 전달받은 주소값 앞에다가 *(포인터)를 붙임으로서 input의 실제 값을 참조할 수 있게 되는 것이다.

이와 같은 방법을 값에 의한 호출, 즉 Call-by-Reference라고 불린다. 




소스




WRITTEN BY
Who1sth1s

,