포인터 함수란 포인터 변수를 매개변수로 갖는 함수를 말합니다.
포인터 함수의 매개변수가 포인터 변수이기 때문에 해당 인수를 대입할 때도 포인터 변수 형식으로 대입하고자 하는 값의 주소값을 입력해줘야 합니다.
포인터 함수에서 사용되는 매개변수와 인수 또한 일반 함수와 동일하게 그 데이터 타입이 일치해야 하고 개수와 순서도 일치해야 합니다.
배열을 포인터로 활용할 수 있기 때문에 포인터 함수의 매개변수에 배열을 사용할 수 있습니다.
포인터 함수의 매개변수의 값을 배열로 받아 배열의 값을 바꾼다면 주소를 활용해 값을 변경하는 것이므로 함수 안에서 변경한 배열의 값이 그대로 변경되어 저장됩니다.
이렇게 전달된 포인터 함수의 매개변수는 일반 함수에서 전달된 매개변수와 다릅니다. 이는 각 함수를 호출할 때, 인수가 전달되는 방식이 다르다는 것을 의미합니다.
일반 함수로 인수를 전달하는 것은 값에 의한 호출이라고 하지만, 포인터 함수로 인수를 전달하는 것은 참조에 의한 호출이라고 합니다.
값에 의한 호출(Call by value)은 인수를 매개변수로 복사해서 전달하는 것을 의미하며 값을 복사해서 전달하는 것이기 때문에 인수(원본)는 변경되지 않습니다.
반면에, 참조에 의한 호출(Call by reference)은 인자의 주소를 포인터 형태의 매개변수로 전달하는 것을 의미하며 값의 주소를 전달하는 것이기 때문에 참조에 의한 호출은 일반 함수에서 매개변수의 값을 변경하면 인수의 값도 변경됩니다. 참조에 의한 호출의 매개변수는 인자를 가리키는 포인터로 선언하고, 함수를 호출할 때는 인수로 전달하려는 변수의 주소를 전달합니다.
함수를 정의할 때는 포인터 타입의 매개변수를 역참조하여 매개변수가 가리키는 변수에 접근합니다.
일반 함수의 정의에서 표현되는 매개변수는 입력 매개변수라고 불리지만 포인터 함수의 정의에서 표현되는 매개변수는 입출력 매개변수라고 불립니다. 이처럼 일반 함수의 값에 의한 호출은 실제 인수 값이 입력되기만 할 뿐 변경되지는 않습니다만 포인터 함수의 참조에 의한 호출은 실제 인수의 값이 입력뿐만 아니라 출력도 가능하므로 값이 변경됩니다.
일반 함수와 포인터 함수의 매개변수 형태가 모두 정의된 매개변수를 출력 매개변수라고 하는데 출력 매개변수는 참조에 의한 호출이지만 입출력 매개변수와는 달리 함수 안에서 값이 사용될 수 없는 매개변수입니다. 하지만 함수가 종료되기 전에 값이 변경되기는 합니다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
[C언어 공부하기] 15. 배열과 포인터 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.01 |
---|---|
[C언어 공부하기] 14. 포인터 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.01 |
[C언어 공부하기] 13. 메모리와 주소 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.30 |
[C언어 공부하기] 12. 배열 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.30 |
[C언어 공부하기] 11. 함수의 형태 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.30 |
[C언어 공부하기] 10. 매개변수와 인수 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.29 |
[C언어 공부하기] 9. 함수의 기본 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.29 |
[C언어 공부하기] 8. 반복문 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.06.29 |