본문 바로가기
Language/C언어

C020_함수 포인터

by OdOp 관리자 2023. 9. 22.
SMALL

함수 포인터란??

함수를 저장하는 포인터를 뜻합니다. 이는 ㅎ마수포인터를 주고받거나 함수 포인터로 함수를 호출할 수 있습니다. 

 

함수 포인터를 선언할 때는 함수 포인터와 저장될 함수의 반환값 자료형, 매개변수 자료형과 개수가 일치해야 합니다.

 

void형 함수 포인터

#include <stdio.h>

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

int main()
{
    void (*fp)();  //반환값과 매개변수가 없는 함수 포인터 fp 선언 

    hello();  //함수 이름으로 함수를 직접 호출 
    fp = hello;  //hello 함수의 메모리 주소를 함수 포인터 fp에 저장
    fp();  //함수 포인터로 hello 함수 호출
    return (0);
}

void형 함수 포인터를 선언했습니다. 이는 반환값이 없는 함수를 포인터로 설정했기 때문입니다. 

hello를 호출했을 때와 선언한 fp에 hello를 할당하고 fp를 호출했을 때의 값이 똑같은 것을 확인해 보시길 바랍니다. 

 

int형 함수 포인터

#include <stdio.h>

int add(int a, int b)
{
    return a + b;
}

int mul(int a, int b)
{
    return a * b;
}

int main()
{
    int (*fp)(int, int);  //int형 반환값, int형 매개변수 두 개가 있는 함수 포인터 fp 선언

    fp = add;  //add 함수의 메모리 주소를 함수 포인터 fp에 저장
    printf("%d\n", fp(10, 20));
    fp = mul;  //mul 함수의 메모리 주소를 함수 포인터 fp에 저장
    printf("%d\n", fp(10, 20));
    return (0);
}

이번에는 int형 함수 포인터를 선언해 보겠습니다. 저희가 사용할 함수들이 모두 반환해 주는 자료형이 int형이기 때문에 함수 포이터의 자료형은 int형이어야 합니다. 매개변수는 int형으로 2개 가지고 있네요. 그러면 똑같이 저도 2개 설정해 주겠습니다. 그러면 'int (*fp)(int, int);'로 선언할 수 있겠죠. 

fp에 함수 메모리 주소를 각각 할당해 주어서 사용해 줍니다. 

LIST

'Language > C언어' 카테고리의 다른 글

C022_파일 쓰고 읽기 fput, fgets  (0) 2023.09.24
C021_파일 쓰고 읽기  (0) 2023.09.23
C019_재귀 함수 사용하기  (0) 2023.09.21
C018_비트 연산  (0) 2023.09.20
C017_함수, 가변인자 사용하기  (0) 2023.09.19