C언어 독학 Call by reference
C언어 독학 Call by reference
특정 변수의 메모리상의 주소 값을 저장하는 것이 포인터이고 이 녀석도 변수의 한 종류이기 때문에 메모리에 주소 값을 갖게 이중 포인터에 그 값을 저장할 수 있다고 지난 글에서 정리를 해봤다. 이번 글에서는 이중 포인터를 활용하는 예제를 통해서 그 과정을 정리해볼까 한다. 그전에 전달되는 인자의 개념을 다시 한 번 정리하고 넘어간다. 함수를 호출하면서 던져주는 값인 인자는 해당 값 자체를 넘겨주는 것이 아니고 값을 복사해서 넘겨준다는 개념을 지난 글에서 정리해봤었는데… 이렇게 복사된 값을 변경해도 해당 변수에 저장된 원래의 값은 변경되지 않는걸 확인했었다.
그래서 그 값을 변경하기 위해서는 포인터를 이용해서 해당 주소에 직접 접근해서 주소 값 자체를 바꿔버려야 한다는 걸 알아봤었다.
X, y 의 주소 값을 pt1과 pt2에 각각 저장한 후 값을 교환하는 함수 aaa()를 호출하면서 pt1과 pt2를 전달하고 있다. 그리고 이것을 받는 함수에서는 다시 *연산자를 이용해서 해당 x, y의 주소에 접근해서 값을 변경하고 있는 과정이다. 그렇다면 이와 비슷한 과정으로 포인터 변수에 저장된 값을 바꾸기 위해서는 어떻게 해야 할까? 포인터 변수의 주소 값을 넘겨줘서 바꿔줘야 하기 때문에 aaa()에서는 이중 포인터를 사용해서 pt1m과 pt2의 주소 값을 받아야 한다.
즉, 전달되는 인자는 pt1과 pt2의 주소 값이 되어야 하고 aaa()에서 받는 매개변수는 이중 포인터여야 하는 것이다. 역시 예제에서 확인해본다.
Pt1과 pt2가 가리키고 있는 값을 변경하기 위해서 이 녀석들의 주소를 넘겨주고 aaa()에서는 이중 포인터로 그 값을 받아서 교환하고 있는 모습이다. 이렇게 해서 이중 포인터의 활용하는 예제를 간단하게 살펴봤다.