[c언어] 함수 포인터와 함수 포인터의 배열의 값

C 언어에서 함수 포인터와 함수 포인터의 배열은 함수를 가리키는 포인터입니다. 이 두 가지 개념은 프로그램의 유연성을 높일 수 있는 강력한 기능을 제공합니다. 이번 글에서는 함수 포인터와 함수 포인터의 배열이 실제로 어떻게 사용되는지, 또한 이들이 어떻게 값으로 취급되는지에 대해 알아보겠습니다.

함수 포인터

함수 포인터는 특정 함수를 가리키는 포인터이며, 함수의 주소를 저장합니다. 이러한 특성을 통해 우리는 실행 중에 어떤 함수를 호출할지 동적으로 결정할 수 있습니다.

다음은 함수 포인터를 정의하고 사용하는 간단한 예제입니다.

#include <stdio.h>

void sayHello() {
    printf("Hello, world!\n");
}

int main() {
    void (*funPtr)() = sayHello;  // 함수 포인터를 선언하고 함수를 가리킴
    funPtr();  // 함수 포인터를 통해 함수 호출
    return 0;
}

위 예제에서는 sayHello 함수를 가리키는 함수 포인터 funPtr을 선언하고 해당 함수를 호출합니다.

함수 포인터의 배열

함수 포인터의 배열은 함수 포인터들의 배열로, 각 원소가 함수를 가리키는 포인터입니다. 이를 사용하면 여러 함수 중 하나를 선택하여 호출할 수 있습니다.

다음은 함수 포인터의 배열을 사용하는 예제입니다.

#include <stdio.h>

void func1() {
    printf("Function 1\n");
}

void func2() {
    printf("Function 2\n");
}

void func3() {
    printf("Function 3\n");
}

int main() {
    void (*funcArray[3])() = {func1, func2, func3};  // 함수 포인터의 배열을 선언하고 초기화
    int choice = 1;
    funcArray[choice - 1]();  // 선택된 함수 호출
    return 0;
}

위 예제에서는 func1, func2, func3 함수를 가리키는 함수 포인터의 배열을 선언하고 선택에 따라 해당 함수를 호출합니다.

함수 포인터와 배열의 값

함수 포인터와 함수 포인터의 배열은 주소값으로 취급됩니다. 따라서 이들을 변수나 다른 배열에 할당하거나 전달할 수 있습니다.

#include <stdio.h>

void myFunc() {
    printf("My function\n");
}

int main() {
    void (*ptr)() = myFunc;  // 함수 포인터에 함수 주소를 할당
    void (*arr[1])() = {myFunc};  // 함수 포인터의 배열에 함수 주소를 할당
    printf("Function pointer address: %p\n", (void *)ptr);  // 함수 포인터의 주소 출력
    printf("Function pointer array address: %p\n", (void *)arr);  // 함수 포인터의 배열의 주소 출력
    return 0;
}

위에서 ptrmyFunc 함수를 가리키는 함수 포인터이고, arrmyFunc 함수를 가리키는 함수 포인터의 배열입니다.

함수 포인터와 함수 포인터의 배열은 여러가지 방식으로 활용될 수 있으며, 이해하는 데 시간이 걸릴 수 있지만, C 프로그래밍에서 더 많은 유연성과 제어를 가능하게 합니다.

이상으로 함수 포인터와 함수 포인터의 배열의 값에 대한 간단한 예제를 살펴보았습니다. 추가적인 궁금증이 있다면 언제든지 질문해주세요.