한국어
C/C++

함수 포인터의 배열

pjk 2014.05.24 12:25 조회 수 : 5567

함수 포인터는 응용프로그램에서 많이 사용되는데 함수 포인터 배열의 선언 형식을 보도록 하자

반환자료형 (*배열이름 [배열크기])(인수리스트)
 
다음 사칙연산을 계산하는 함수를 위한 포인터 배열을 가정할 때, 다음과 같은 배열을 선언할 수 있다.

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);

해당 하는 함수를 호출하는 부분이다.

함수 포인터는 임베디드 시스템에서 인터럽트 처리 테이블처럼 이벤트 처리 때 처럼, 상황에 따라 호출하는 함수가 다를 경우 유용하게 사용된다.