강좌 & 팁
함수 포인터
변수나 파일을 포인터 변수를 이용하여 접근하듯이, 함수도 포인터를 이용하여 호출할 수 있다.
함수 포인터는 함수의 실행코드의 시작주소를 가지고 있으며, 함수 포인터를 이용하여 함수를 호출할 수 있다. 배열 이름이 메모리 주소값을 가지는 상수이듯이, 함수이름도 함수의 시작코드의 주소값을 가지는 주소값 상수로 볼 수 있다.
<함수포인터의 형식>
반환자료형 (* 함수포인터변수이름)(인수 1, 인수 2 ...);
다음의 예제를 통해서 함수 포인터의 사용을 알아보자
#include <stdio.h>
int plus (int, int);
int minus (int, int);
int main()
{
char op;
int num1, num2;
int *handler(int, int);
printf(" Enter Operator <'+" or '-' : ");
scanf ("%c", &op);
if (op == '+') handler = plus;
if (op == '-') handler = minus;
printf("enter first number:");
scanf( "%d" &num1);
printf("enter second number:");
scanf ("%d", &num2);
printf("the result is %d.\n", (*handler)(num1,num2));
return 0;
}
int plus (int a, int b) { return (a+b);}
int minus (int a, int b ) {return (a-b);}
<프로그램 설명>
int (*handler)(int, int);
함수 포인터 handler의 선언이다. 이 함수 포인터는 반환자료형이 int 형이고, 두 개의 int 형 인수를 가지는 함수를 가리킬 수 있다는 의미이다.
if( op == '+") handler= plus;
함수 포인터 handler 가 plus() 함수를 가리키게 된다.
printf("the result is %d.\n", handler( num1, num2));
함수 포인터 handler를 이용하여 함수를 호출한다. 이때 포인터 (*)를 생략하고 다음과 같이 호출 할 수 있다.
printf("the result is %d.\n", handler (num1, num2));
감사합니다.
함수 포인터에 대해 잘 몰랏던 차에 잘보고 갑니다~