본문으로 바로가기

C :: call by value/reference

category Programing/C 2017. 3. 29. 01:37

나의 전환점이 되어야할 과제가 주어졌다.



1. 함수를 사용하는 이유

2. call by value, call by reference

3. 실습3

4. 과제 - 오름/내림차순 정렬


두번째로 call by value와 call by reference가 무엇인지 알아보자


먼저 call by value란 무엇일까?


함수 안에서 선언되는 변수는 타함수에서 사용할 수 없다. 지역변수이기 때문이다.

그렇다면 우리가 보통 메인함수에서 변수를 받아 사용하는 함수는 어떤 원리로 작동하는 것일까?


여기서 변수의 값이 넘어가는 과정을 call by value라고 한다.


조금 자세히 말하면 실제로 변수가 넘어가는것이 아니라 변수의 값이 타 함수의 변수에 복사되어 저장되는것이다.


그렇기 때문에 다른 함수에서 call by value로 변수를 이어가도 main에 있는 원래 변수에는 변화가 없다.



그렇다면 call by reference란 무엇일까?


이것또한 타 함수에게 변수를 넘겨주는 방식이다. call by value와 다른점은 넘겨주는 정보가  변수의 값이 아니라


변수의 주소이라는 것이 다르다. 변수의 주소를 넘겨주면 무엇이 다른가? 변수의 주소가 넘겨진 타 함수에서의 계산이


원래의 변수에도 영향을 준다는 점이 다르다. 원래의 변수와 같은 주소를 가진 변수가 하나 더 생긴 셈이다.


같은 주소를 가졌기 때문에 그 주소의 데이터에 변화를 주면 원래의 변수가 변하는 것은 당연한게 되는것이다.


그런데 왜 굳이 call by reference를 사용하는 것일까?


한가지 예를 들자면 필요한 변수가 너무 많아 배열을 통해 저장했다고 치자 call by value를 통해 이 배열을 타 함수에


넘기기 위해서는 수많은 변수를 선언해야한다. 하지만 call by reference를 이용하면 첫번째 주소값만 전달하면 되기때문에


훨씬 간편해지기 때문에 call by reference를 사용하는 것이다.