함수포인터2

 

다음의 예제로 함수포인터에 대하여 더 알아 보겠습니다. 

 



 


#include <stdio.h>
//#include <process.h>

int (* get_operator())(int,int); 

int plus (int,int);
int minus (int,int);
int multiply(int,int);
int divide(int,int);

int (* get_operator())(int,int)  

{
  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)) 
    {
      switch (choice)
      {
        case 0 : 
          return &plus;
        case 1 : 
          return &minus;
        case 2 : 
          return &multiply;
        case 3 : 
          return &divide;
        case 4 : 
          return 0;
        
      }
      
    }
    else 
    {
      printf("Wrong Input, enter again!\n");
    }

  }
}


int main()
{
  int num1,num2,result;
  int (*handle) (int,int=0;
  while(1)
  {
    handle=get_operator();
    if(handle==0)
    {
      printf("This is the end of program!\n");
      exit(0);
    }
  

    printf("Enter the first operand : ");
    scanf("%d",&num1);
    printf("Enter the second operand : ");
    scanf("%d",&num2);

    result = handle (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);
}


실행결과입니다


 a4testsimplecalc.png


get_operator 함수는 plus , minus ,multiply의 주소를 받게됩니다.

0~4 사이의 값을 받게되면 각각의 함수 주소들이 반환되고 이를 handle 에 담게되는데 handle 
역시 함수 포인터 입니다.