[c언어] 함수 포인터와 void 포인터

C 언어에서는 함수 포인터와 void 포인터를 사용하여 다양한 기능을 구현할 수 있습니다. 이러한 포인터들은 프로그램의 유연성을 향상시키고 메모리를 효율적으로 활용할 수 있도록 도와줍니다.

함수 포인터

함수 포인터는 함수의 주소를 저장하는 포인터로, 특정 기능을 가진 함수를 가리키고 호출할 수 있습니다. 이는 함수를 매개변수로 전달하거나 함수 포인터 배열을 사용하는 등의 유연한 프로그래밍을 가능케 합니다.

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

#include <stdio.h>

void say_hello() {
    printf("Hello, World!\n");
}

int main() {
    void (*ptr)() = say_hello;
    ptr();  // say_hello 함수 호출
    return 0;
}

위 예제에서 say_hello 함수의 주소를 함수 포인터 ptr에 저장하고, ptr을 통해 해당 함수를 호출하고 있습니다.

void 포인터

void 포인터는 어떠한 타입의 포인터도 저장할 수 있는 포인터입니다. 이는 어떠한 데이터나 객체의 주소를 저장하고, 필요에 따라 해당 타입으로 형변환하여 사용할 수 있도록 해줍니다.

아래는 void 포인터를 활용한 예제입니다.

#include <stdio.h>

int main() {
    int num = 10;
    float fnum = 3.14;
    
    void *ptr;
    ptr = &num;
    printf("Value of num: %d\n", *(int*)ptr);
    
    ptr = &fnum;
    printf("Value of fnum: %f\n", *(float*)ptr);
    
    return 0;
}

위 예제에서 ptr은 int 형식의 변수 num과 float 형식의 변수 fnum의 주소를 저장하고, 필요에 따라서 해당 타입으로 형변환하여 값을 출력하고 있습니다.

함수 포인터와 void 포인터는 C 프로그래밍에서 다양한 상황에서 유용하게 활용될 수 있는 강력한 기능들이므로, 세심한 주의를 기울여 사용해야 합니다.

이상으로 C 언어에서 함수 포인터와 void 포인터에 대해 알아보았습니다.