2020년 3월 20일 금요일

함수 포인터의 배열

https://makersweb.net/cpp/1363

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

반환자료형 (*배열이름 [배열크기])(인수리스트)

다음 사칙연산을 계산하는 함수를 위한 포인터 배열을 가정할 때, 다음과 같은 배열을 선언할 수 있다.

int (*handle[4])(int, int)

이때 배열의 각 원소는 함수의 시작주소를 가진다.

다음의 예제로 함수 초인터 배열의 사용을 알아보자.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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);
해당 하는 함수를 호출하는 부분이다.
함수 포인터는 임베디드 시스템에서 인터럽트 처리 테이블처럼 이벤트 처리 때 처럼, 상황에 따라 호출하는 함수가 다를 경우 유용하게 사용된다.

댓글 없음:

댓글 쓰기