void Add(); void Min(); void SelFunction(int s) { void (*fPtr)(void); if(s == 1) fPtr = Add; else fPtr = Min; fPtr(); } void main() { int sel; while(1) { printf("덧셈(1) 뺄셈(2) 종료(3) : "); scanf("%d", &sel); if(sel == 3)break; if((sel < 1) || (sel > 2)) { printf("잘못된 범위의 수를 입력하셨습니다. \n\n"); continue; } SelFunction(sel); } } void Add() { int a, b; printf("덧셈을 위한 두 개의 숫자 입력 : "); scanf("%d%d", &a, &b); printf("덧셈 결과 : %d\n\n", a + b); } void Min() { int a, b; printf("뺄셈을 위한 두 개의 숫자 입력 : "); scanf("%d%d", &a, &b); printf("뺄셈 결과 : %d\n\n", a - b); }
프로그램 실행화면
포인터도 잘 모르겠는데 함수 포인터라는 놈이 나온다. 정신이 안드로메다로 갈 수도 있다. 도대체 이 포인터 라는 놈은 왜 자꾸 나오는 것일까? 엄청 편하기 때문이다.
함수 포인터도 써야하는 타이밍을 안다면 쉽게 사용할 수 잇다. 그리고 보통 잘 사용하지 않을 수 밖에 없는 이유가 있다. 우선 써야 하는 경우를 생각해 보자.
내가 지금 임베디드 프로그래밍을 하고 있다고 치자, 또는 운영체제를 수정하고 있다고 치자. 어느 함수를 만들어야 한다. 그런데 이 함수의 성격상 다른 함수들을 실행하여야 하는데 그때 그때 실행해야 할 함수가 다를 수가 있다.
이럴 때 함수 포인터를 사용하는 것이다. 이 함수 포인터를 이용해 실행 할 함수의 주소 값 즉 포인터를 넘겨 줌으로써 원한느 함수를 그때 그때 실행할 수 있는 것이다.
위의 에제도 똑같은 내용이다. 여기서는 매개변수로 sel값만을 넘겨 주었지만 함수 포인터를 직접 넘겨 주는 것이 더 좋은 예라고 할 수 잇다. 사실 잘 쓰지 않는 놈이니 시험 문제에 나오는 정도만 알면 될 것 같다.