함수 포인터는 시그니쳐를 원소 형식으로 취급해요.
두 개의 정수 형식을 입력 인자로 받고 반환 형식이 정수인 함수 포인터 변수는 int (*fun)(int ,int); 처럼 선언할 수 있어요.
그리고 fun 포인터 변수에 함수 원형이 같은 함수 이름을 대입할 수 있죠.
함수 포인터 변수는 함수 호출과 같은 방법으로 사용할 수 있어요.
또한 typedef int (*Fun)(int ,int); 처럼 함수 포인터 형식명을 정의하여 Fun fun; 처럼 변수 선언에 사용할 수도 있죠.
예를 들어 두 개의 정수를 입력 인자로 받아 두 수의 합과 차, 곱, 나누기를 하여 결과를 반환하는 함수들이 있다고 가정해요.
그리고 typedef int (*Fun)(int,int); 처럼 함수 포인터 형식명을 정의하기로 해요.
Fun 형식을 원소로 하는 배열을 선언할 수도 있죠.
그리고 각 원소에 두 수를 입력 인자로 받아 사칙 연산을 수행하여 결과를 반환하는 함수명으로 대입할 수 있어요.
그리고 배열의 원소를 함수처럼 사용할 수 있답니다.
typedef int(*Fun)(int,int); //함수 포인터 형식 Fun 정의
…중략…
Fun arr[4] = {Add,Sub,Mul,Div};
…중략…
printf(“%d\n”, arr[i](9,2));
◈ 함수 포인터 변수를 사용하는 예
#include <stdio.h> typedef int(*Fun)(int,int); //함수 포인터 형식 Fun 정의 int Add(int a,int b); int Sub(int a,int b); int Mul(int a,int b); int Div(int a,int b); int main() { Fun arr[4] = {Add,Sub,Mul,Div}; int i = 0; for(i=0; i<4; i++) { printf("%d\n", arr[i](9,2)); } return 0; } int Add(int a,int b) { return a+b; } int Sub(int a,int b) { return a-b; } int Mul(int a,int b) { return a*b; } int Div(int a,int b) { if(b) { return a/b; } return 0; }
◈ 실행 결과
11 7 18 4