사전적 정의
값에 의한 호출
[ call by value ]값 호출.
(1) 파라미터 전달 기법의 한 가지로 절차를 호출하기 전에 실인수의 값을 계산하고 그 값을 호출 시에 대응되는 국소적 변수인 가인수에 대입함으로써 전달되는 방식.
(2) 직접 γ값(위치)을 가인수에 전달하는 방식. 즉, 실인수의 내용을 참조하기 위해 일일이 주소를 찾을 필요 없이 직접 가인수에 전달된 값으로 실행하는 방식. PASCAL 언어나 C 언어 등에서 일반적으로 사용된다.
[보충설명]
값 호출 방식(call by value) 호출 프로그램에서 a=5, b=3이면 a+b=8이므로 피호출 프로그램에 대응되는 값은 x=8,y=z=5이기 때문에 y=y+1=5+1=6, z=z+x+1=5+8+1=14가 된다. 따라서 a는 5를 출력한다.
참조에 의한 호출
[ call by reference ]참조 호출. PL/I, COBOL, FORTRAN 등과 같은 언어에서 주로 사용되며, 절차나 함수를 호출할 때, 가파라미터와 실파라미터 사이에서 취할 수 있는 대응 양식의 하나. 어드레스와 지표(포인터) 등 실파라미터를 참조하기 위한 정보가 파라미터에 대하여 주어진다.
[보충설명]
참조 호출 방식(call by reference) 호출 프로그램에서 a=5, b=3이면 a+b=8이므로 피호출 프로그램에 대응되는 값 x에는 a+b=8이 저장되어 있는 주소, y와 z에는 a=5가 저장되어 있는 주소이다. 첫 문장에서 y=y+1=5+1=6으로 여전히 x=8이고 y=z=6이다. 그리고 두 번째 문장에서 z=z+x+1=6+8+1=15가 된다. 따라서 a는 15를 출력한다.
출처 - 네이버 지식백과 call by referance & call by value 검색.
Chapter 14-2 Call-by-value vs Call-by-reference
Call-by-value 와 Call-by-reference는 함수의 호출방식을 의미한다.
+값을 전달하는 형태의 함수호출:Call-by-value
함수를 호출할 때 단순히 값을 전달하는 형태의 함수호출: Call-by-value
메모리의 접근에 사용되는 주소 값을 전달하는 형태의 함수호출:Call-by-reference
즉,Call-by-value 와 Call-by-reference 구분하는 기준은 함수의 인자로 전달되는 대상에 있다.
"그럼 지금까지 우리가 정의한 함수 대부분은 Call-by-value였겠네요?"
-그렇다.
예제를 봅시다.
위 예제 17행 주석에 쓰여있는 대로, 17행의 함수호출 결과로 num1과 num2에 저장된 값이 변경되기를 기대하면서 Swap 함수를 호출하고 있으며, 그 결과로 num1과 num2에 저장된 값이 매겨변수 n1과 n2에 복사된다. 그림을 보면 이해가 빠르다
하지만 이는 매개변수 n1과 n2에 저장된 값을 변경시키는 것일 뿐, num1과 num2에 저장된 값의 변경으로까지 이어지지 않는다. 그림을 보자
결국 두 매개변수 사이에서만 값의 변환이 일어난 것이다.
+주소 값을 전달하는 형태의 함수호출:Call-by-reference
앞서 보인 예제에 대한 원하는 결과 값을 얻을수 있을까? 가능하다.
답은 Call-by-reference에 있다.
즉, num1과 num2의 주소 값을 Swap 함수로 전달해서 Swap 함수 내에서 num1과 num2에 직접 접근이 가능하도록 하는 것 이다.
성공 값 변공 성공했습니다. Swap 함수내에서의 *ptr1은 main 함수의num1
Swap 함수내에서의 *ptr2는 main 함수의 num2를 의미하게 된다.
결과적으로 num1에 저장된 값과 num2에 저장된 값은 서로 바뀐다.
+이제는 scanf 함수호출 시 & 연산자를 붙이는 이유를 알 수 있다.
[출처] [이방인♪C] C언어 강좌 Chapter 14-2 Call-by-value vs Call-by-reference