C 언어에서는 포인터를 변수뿐만 아니라 함수에도 할당할 수 있습니다. 이를 함수 포인터(Pointer to Function)라고 하며, 코드의 유연성과 재사용성을 높이는 강력한 기능입니다.
함수 포인터란?
함수 포인터는 메모리상에 존재하는 함수 정의의 시작 주소(기준 주소)를 저장하는 포인터입니다. C 언어에서 배열 이름이 배열의 첫 번째 요소 주소를 나타내듯이, 함수 이름 자체가 해당 함수의 시작 주소를 의미합니다.
선언 방법
함수 포인터는 다음과 같은 형식으로 선언합니다.
데이터타입 (*포인터이름) ();
함수 이름 자체가 곧 함수의 기준 주소이므로, 초기화는 함수 이름을 사용하여 수행합니다.
예시
int (*p) ();
p = display; // display()는 이미 정의된 함수
예제 1: 함수 포인터로 함수 호출하기
다음은 함수 포인터를 사용하여 함수를 호출하는 기본적인 프로그램입니다.
#include<stdio.h>
main () {
int (*p) (); // 함수 포인터 선언
clrscr ();
p = display; // display 함수의 주소를 포인터에 저장
*(p) (); // 함수 포인터를 통해 함수 호출
getch ();
}
display () { // 포인터가 가리키는 위치에 있는 호출될 함수
printf("Hello");
}
실행 결과
Hello
예제 2: 매개변수와 함께 함수 포인터 활용하기
이번에는 포인터를 인자로 전달받아 값을 수정하는 함수를 함수 포인터 개념과 함께 살펴보겠습니다.
#include <stdio.h>
void show(int* p){
(*p)++; // *p에 1을 더함
}
int main(){
int* ptr, a = 20;
ptr = &a; // 변수 a의 주소를 ptr에 저장
show(ptr); // show 함수 호출
printf("%d", *ptr); // 결과 출력
return 0;
}
실행 결과
21
정리
함수 포인터를 활용하면 함수의 주소를 변수처럼 다룰 수 있으며, 콜백(callback) 함수 구현이나 유연한 프로그램 구조 설계에 널리 사용됩니다. 위 예제들을 통해 함수 포인터의 선언, 초기화, 그리고 호출 방법까지 기본기를 익힐 수 있습니다.