CallByValue와 CallByReference
함수를 호출할 때 필요한 경우 인자값을 전달해줄 때가 있다.
인자값을 전달 할 때 2가지 방식이 존재 한다.
값을 복사하여 전달 하거나 참조값을 넘겨주는 방식인데 이것을 각각
Call-By-Value와 Call-By-Reference 라 한다.
Call-By-Value |
각각에 대해 자세히 살펴 보자.
값을 복사 해서 인자 값을 전달 하는 것은 아래와 같다.
#include <stdio.h> void callByValue( int value ) { value += 2 ; } int main() { int i= 5; callByValue(i); printf( "callByValue -> i= %d\n", i); |
main에서 i=5이다.
callByValue를 호출 할 때 i를 인자 값으로 넘겨 주면 함수 인자 value에 i의 값이 복사 된다.
그러므포 callByValue 함수의 인자 값 value는 5가 되며 함수 안에서 아무리 value 값을 바꿔도
main 함수의 i 값에 영향을 미치지 않는다.
위의 프로그램을 수행하면 함수안에서 2를 더했는데도 main의 i 값에는 영향을 받지 않아
printf의 결과는 i 값은 초기값 5 그대로 출력이 된다.
Call-By-Reference |
이번에는 함수의 인자를 참조 값으로 전달하는 예를 살펴 보도록 하겠다.
#include <stdio.h> void callByReference( int *value ) { *value += 2; } int main() { int i= 5; callByReference(&i); printf( "callByReference -> i = %d\n", i ); } |
callByReference 함수가 정의 된 것을 보면 포인터로 값을 받도록 되어있다.
이말을 callByReference를 호출 할 때 값을 주는 것이 아닌 주소 값을 전달을 받는다.
callByReference( &i ); 부분을 보면 i 앞에 &가 있으며 이 뜻은 i의 주소 값이라는 의미다.
callByReference 함수안의 인자 value는 main 함수의 i와 동일한 주소를 가리키고 있다는 뜻이다.
*value += 2; 를 수행하면 "value가 가리키는 i의 값을 2를 더해줘" 라는 뜻이 되며
함수안에서 value 값이 변경 되면 i의 값이 바뀐다.
위의 프로그램을 수행하면 함수안에서 *value 즉 value가 가리키는 값에 2를 더한 것이 되어
main의 i 값에는 영향을 받게 되어 printf의 결과는 i 값은 초기값 5에 2를 더한 값인 2가 출력된다.
'프로그램 > C' 카테고리의 다른 글
[C] 구조체 (0) | 2017.07.24 |
---|---|
[C] 포인터와 상수(const) (0) | 2017.07.23 |
[C] 포인터와 배열 (0) | 2017.07.19 |
[C] 시간차이 구하기 ( millisecond 까지.. ) (0) | 2017.07.16 |
[C] 포인터 자료형 (0) | 2017.07.13 |