Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 함수 포인터를 선언하고 사용하는 방법

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) 함수 구현이나 유연한 프로그램 구조 설계에 널리 사용됩니다. 위 예제들을 통해 함수 포인터의 선언, 초기화, 그리고 호출 방법까지 기본기를 익힐 수 있습니다.