한국어
C/C++
 

함수 포인터의 배열

pjk 2014.05.24 12:25 조회 수 : 8664

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

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

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

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

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

 

번호 제목 글쓴이 날짜 조회 수
공지 C Programming FAQs(한글번역 pdf문서) makersweb 2014.03.18 27750
22 비트 필드의 크기는 해당 유형의 크기를 초과할 수 없다. makersweb 2023.04.25 1379
21 flexible array member 에 대해서 file makersweb 2020.02.20 2908
20 C++로 플러그인 개발 file makersweb 2019.12.08 2741
19 배열과 포인터, 등가포인터 예제 makersweb 2019.01.16 2005
18 싱글톤 객체생성 패턴에 대해서 file makersweb 2018.07.01 4545
17 함수포인터와 typedef로의 선언 makersweb 2018.02.03 1993
16 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 pjk 2014.05.24 8670
15 switch와 if 중 어느 것이 더 빠른가 file makersweb 2017.01.31 3805
14 구조체 배열을 반환하는 함수를 반환하는 함수를 호출하여 구조체 멤버 배열 요소 접근하기 makersweb 2016.05.22 10871
13 c/c++문자열, 유니코드 관련 함수 makersweb 2015.07.09 6230
12 volatile이 정확히 어떤 의미를 가지는 건가요? pjk 2014.09.30 5506
11 HEX(16진수) to ASCII(아스키) 변환 코드 pjk 2014.08.24 35064
10 strcmp, wcscmp, _tcscmp pjk 2014.07.18 11452
9 클래스 멤버에 대한 액세스 제어 pjk 2014.06.27 5540
8 unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. file pjk 2014.05.24 38830
7 void형 포인터 pjk 2014.05.24 6101
» 함수 포인터의 배열 pjk 2014.05.24 8664
5 구조체 메모리 저장방식 #pragma pack file pjk 2014.05.24 5957
4 Bit fields(비트필드) pjk 2014.05.24 4850
3 영어를 C언어로, 또는 C언어를 영어로 변환 해주는 cdecl makersweb 2014.03.19 8739