함수 포인터는 시그니쳐를 원소 형식으로 취급해요.
두 개의 정수 형식을 입력 인자로 받고 반환 형식이 정수인 함수 포인터 변수는 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));
◈ 함수 포인터 변수를 사용하는 예
#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
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[정답] 디딤돌 C언어 13.부호있는정수표현-1진 보수 방식 (0) | 2016.04.29 |
---|---|
[정답] 디딤돌 C언어 12. 부호있는정수표현-부호비트필드 (0) | 2016.04.29 |
[정답] 디딤돌 C언어 11. 메모리, 10진수, 2진수, 16진수 (0) | 2016.04.29 |
[정답] 디딤돌 C언어 8. 정리하기 (C언어 개요) (0) | 2016.04.29 |
[c language] 117. 콜백 (0) | 2016.04.24 |
[c language] 115. 함수 포인터와 콜백 개요 (0) | 2016.04.24 |
[c language] 101~114 도서 관리 프로그램 소스 코드 (0) | 2016.04.24 |
[C language] 114. 도서 관리 프로그램 - 로딩 (0) | 2016.04.24 |
[c language] 113. 도서 관리 프로그램 - 저장 (0) | 2016.04.24 |
[C language] 112. 도서 관리 프로그램 - 장르 삭제 (0) | 2016.04.24 |