int (*fPtr1)(int);
: 함수포인터 fPtr1은 리턴형이 int이고 int형 인자 1개를 전달받는 모든 함수를 가리킬 수 있는 포인터가 된다.
void (*fPtr2)(int, int);
: 함수포인터 fPtr2는 리턴형이 void이고 int형 인자 2개를 전달 받는 모든 함수를 가리킬 수 있는 포인터가 된다.
#include <stdio.h> void Add(int a, int b); void (*fPtr1)(int, int) = Add; fPtr1(a, b); return 0; void Add(int a, int b) } |
포인터 배열과 같이 '함수 포인터를 원소로 갖는 함수 포인터 배열'을 생각할 수 있다.
다음은 배열의 크기가 4인 함수 포인터 배열을 선언하는 문장으로 배열의 각 원소가 가리키는 함수는 반환값이 void이고 인자목록이 (double*, double, double)이어야 한다.
void (*pfary[4]) (double*, double, double)
위에서 선언된 배열에 함수 4개의 주소값을 저장하는 문장은 다음과 같다.
pfary[0] = add;
pfary[1] = subtract;
pfary[2] = multply;
pfary[3] = devide;
또는 간단하게 배열의 선언화 초기화 문장으로 처리할 수 있다.
void (*pfary[4]) (double*, double, double) = {add, subtract, multiply, devide};
위의 것들을 사용하여 간단한 사칙연산 예제 프로그램을 작성해 보자.
예제 10-17 출처 : C로 배우는 프로글밍 기초 p.327 |
/* void add(double*, double, double); int main(void) void (*pfary[4])(double*, double, double) = {add, subtract, multiply, devide}; printf("사칙연산을 위하여 각 연산에 대한 번호를 입력하세요. >> \n"); printf("\n사칙연산을 수행할 실수 2개를 입력하세요. >> "); //사칙연산을 배열의 첨자를 이용하여 수행 return 0; void add(double *z, double x, double y) |
[+@ if문을 while문으로 고쳐서, 사용자가 임의로 종류하기 전까지 반복하는 식으로 변경해 보자.]
[ 잘못된 수를 썼을 경우, 다시 입력하라는 문구가 뜨게 하자.]
'Language > C언어' 카테고리의 다른 글
문자열 배열 (0) | 2011.02.26 |
---|---|
메모리 동적 할당 _ 1] malloc 함수 - free 함수 - calloc 함수 (0) | 2010.09.28 |
C 언어의 메모리 구조 (0) | 2010.09.27 |
[Random 함수] 난수 발생. (0) | 2010.09.26 |
[포인터] 함수 인자에서 포인터 사용 : 값에 의한 호출과 주소에 의한 호출 (0) | 2010.09.03 |