함수 포인터는 응용프로그램에서 많이 사용되는데 함수 포인터 배열의 선언 형식을 보도록 하자
반환자료형 (*배열이름 [배열크기])(인수리스트)
다음 사칙연산을 계산하는 함수를 위한 포인터 배열을 가정할 때, 다음과 같은 배열을 선언할 수 있다.
int (*handle[4])(int, int)
이때 배열의 각 원소는 함수의 시작주소를 가진다.
다음의 예제로 함수 초인터 배열의 사용을 알아보자.
#include<stdio.h> int get_operator(); int plus(int, int); int minus(int, int); int multiply(int, int); int divide(int, int); int get_operator() { int choice; while(1) { printf("=======================n"); printf("0 : for plusn"); printf("1 : for minusn"); printf("2 : for multiplyn"); printf("3 : for dividen"); printf("4 : for quitn"); printf("=======================n"); printf("Please Enter operator: "); scanf("%d", &choice); if((choice >= 0) && (choice <=4)) { return (choice); } else { printf("Wrong Input, enter again!n"); } } return 0; } int main() { int op; int num1, num2; int result; int (*hanlde[4]) (int, int) = {plus, minus, multiply, divide} while(1) { op = get_operator(); if(op == 4) { printf("This is the end of program!n"); return 0; } printf("Enter the first operand : "); scanf("%d", &num1); printf("Enter the second operand :"); scanf("%d", &num2); result = hanlde[op] (num1, num2); printf("nthe result of operation is %dnn", result); } return 0; } |int plus(int n1, int n2) { return (n1+n2); } int minus(int n1, int n2) { return (n1-n2); } int multiply(int n1, int n2) { return (n1*n2); } int divide(int n1, int n2) { return (n1/n2); }
<프로그램 설명>
int (*handle[4]) (int, int) = { plus, minus, multiply, divide};
4 개의 원소를 가진 함수 포인터의 배열을 선언하고, 초기화 하는 부분이다.
result = handle[op] (num1, num2);
해당 하는 함수를 호출하는 부분이다.
함수 포인터는 임베디드 시스템에서 인터럽트 처리 테이블처럼 이벤트 처리 때 처럼, 상황에 따라 호출하는 함수가 다를 경우 유용하게 사용된다.