언어 자료구조 알고리즘/디딤돌 C언어

[c language] 116. 함수 포인터

언제나휴일 2016. 4. 24. 17:40
반응형


함수 포인터

함수 포인터는 시그니쳐를 원소 형식으로 취급해요.

개의 정수 형식을 입력 인자로 받고 반환 형식이 정수인 함수 포인터 변수는 int (*fun)(int ,int); 처럼 선언할 있어요.
 
그리고 fun 포인터 변수에 함수 원형이 같은 함수 이름을 대입할 있죠.
함수 포인터 변수는 함수 호출과 같은 방법으로 사용할 있어요.
또한 typedef int (*Fun)(int ,int); 처럼 함수 포인터 형식명을 정의하여 Fun fun; 처럼 변수 선언에 사용할 수도 있죠.  
 
예를 들어 개의 정수를 입력 인자로 받아 수의 합과 , , 나누기를 하여 결과를 반환하는 함수들이 있다고 가정해요.
그리고 typedef int (*Fun)(int,int); 처럼 함수 포인터 형식명을 정의하기로 해요.
Fun 형식을 원소로 하는 배열을 선언할 수도 있죠.
그리고 원소에 수를 입력 인자로 받아 사칙 연산을 수행하여 결과를 반환하는 함수명으로 대입할 있어요.
그리고 배열의 원소를 함수처럼 사용할 있답니다.  

typedef int(*Fun)(int,int); //함수 포인터 형식 Fun 정의
...
중략...
Fun arr[4] = {Add,Sub,Mul,Div};
...
중략...
printf(
"%d\n", arr[i](9,2)); 

 


Program.c


함수 포인터 변수를 사용하는
#include <stdio.h>
typedef int(*Fun)(int,int); //함수 포인터 형식 Fun 정의
int Add(int a,int b);
int Sub(int a,int b);
int Mul(int a,int b);
int Div(int a,int b);
 
int main()
{
    Fun arr[4] = {Add,Sub,Mul,Div};
    int i = 0;
 
    for(i=0; i<4; i++)
    {
        printf(
"%d\n", arr[i](9,2));
    }
    return 0;
}  
 
int Add(int a,int b)
{
    return a+b;   
}
int Sub(int a,int b)
{
   
return a-b;   
}
int Mul(int a,int b)
{
    
return a*b;   
}
int Div(int a,int b)
{
    if(b)
    {
        return a/b;
    }
    return 0;
}


실행 결과
11
7
18
4

반응형