2013년 10월 28일 월요일

C 언어의 함수 포인터

아래 프로그램은 함수를 인자로 받아서 합을 계산하는 프로그램이다.





먼저, 함수 P_FN은 인자로서 f()함수를 전달받고 있다.

함수 P_FN()은 인자로 double f(double x)를 받고 있다. 

따라서 f()함수는 double 형 인자를 받아서 double을 리턴하는 어떠한 함수라도 상관이 없다.

실제 main()함수에서 f()함수는 fn(), sin() 함수를 인자로 사용된 것을 볼 수 있다.

P_FN 함수에서 함수 f()를 호출하기 위해서는 위 프로그램과 같이 f(k)로 하면 함수가 호출된다.

여기서 함수명 f는 주소를 나타내며, (*f)(k), f(k)의 결과는 같다.

아래는 실행 결과를 보여준다.




c언어의 함수 포인터는 1) 함수의 인자로 전달 될 수 있고, 2)배열로서 사용될 수 있고, 3)함수로부터 리턴될 수 있다.

따라서, 마치 변수에 변수 포인터를 사용하는 것과 똑같은 방법으로, 함수에도 함수 포인터 사용할 수 있다.

이것은 C언어에서 포인터 변수는 주소를 저장하고, 포인터 변수를 선언할 때 자료형을 같이 선언해주기 때문이다.

즉, 포인터 변수의 자료형에 따라서 그 자료의 크기를 정확히 컴파일러가 알 수 있기 때문에 변수의 포인터인 int *p와 비슷한 방법으로 함수 포인터를 사용할 수 있는 것이다.