본문 바로가기

Language/C

포인터를 매개변수로


함수의 인수 전달 방법은 간단하게 두가지가 있는데 call by value 와 call by reference이다. call by value 는 간단하게 말해서 전달 인수를 복사해서 넘겨주는 것이다. 이로 인해 메인함수의 원본 변수의 값이 보호가 될수 있지만, 전달되는 값이 많을 때는 함수의 사용이 비효율 적이다는 것이다. 아무리 많은 매개 변수를 넘겨줘도 돌아오는건 한 개 이상이 될 수 없다. 이런 문제점을 해결하는 것이 call by reference이다. 한마디로 포인터를 이용하여 주소를 참조하여 함수간의 매개 변수를 전달 하는 것이다. 전달하는 형식은 다음과 같다.

<형식> main 함수에서 값을 넘겨줄 때

swap(&a,&b);//주소 연산자로 주소값 자체를 넘겨준다.

swap 함수에서 값을 받을 때

swap(int *ap, int *bp)//참조 연산자를 통하여 a와 b의 주소 값을 넘겨 받고 참조 한다.

이 포인터 함수의 단점은 main내의 함수로 넘겨주는 변수의 값이 보호받을수 없다는 것이다. 타 함수에서 값을 넘겨 받은후 연산을 통하여 값이 변경되면 main함수에 있는 변수 또한 값자체가 변경되어 있는 것을 명심해야한다.