ㆍ함수호출-값에 의한 호출(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라고 불린다.
소스
'C언어 > 보고서' 카테고리의 다른 글
C언어 :: 구조체 더 알아보기 (0) | 2015.05.13 |
---|---|
C언어 :: 구조체 ( Struct ) (0) | 2015.05.11 |
C언어 :: malloc 함수를 이용한 동적할당 (1) | 2015.04.13 |
C언어 :: 배열의 확장 2차원 배열 !! (0) | 2015.04.12 |
C언어 :: 배열이란 무엇일까?? (0) | 2015.04.12 |
WRITTEN BY