강좌 & 팁
함수 포인터의 배열
함수 포인터는 응용프로그램에서 많이 사용되는데 함수 포인터 배열의 선언 형식을 보도록 하자
반환자료형 (*배열이름 [배열크기])(인수리스트)
다음 사직연산을 계산하는 함수를 위한 포인터 배열을 가정할 때, 다음과 같은 배열을 선언할 수 있다.
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 plus\n");
printf("1 : for minus\n");
printf("2 : for multiply\n");
printf("3 : for divide\n");
printf("4 : for quit\n");
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 %d\n\n", 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);
해당 하는 함수를 호출하는 부분이다.
함수 포인터는 임베디드 시스템에서 인터럽트 처리 테이블처럼 이벤트 처리 때 처럼, 상황에 따라 호출하는 함수가 다를 경우 유용하게 사용된다.