본문 바로가기
C/개념, 이해

[C/개념, 이해]함수 포인터 C언어

by starfish22 2021. 11. 21.
728x90

▶함수 포인터 선언

void (*func)(void) = nullptr;

void형 함수와 매개변수 없음.

 

int (*func)(int) = nullptr;

int형 함수와 int형 매개변수

 

int (*func[4])(int, int) = {};

크기가 4인 함수 포인터 배열

 

void print(int (*func)(int, int))

{

}

print함수의 매개변수 func 함수 포인터

 

int (*func(int x, int y))(int, int)

{

}

함수 포인터를 함수 반환값으로 사용

 

▶사용예시

void (*func)(void) = nullptr;

#include <stdio.h>

void print()
{
    printf("hello!\n");
}

int main()
{
    void (*func)(void) = nullptr;

    func = print; //print함수의 메모리 주소를 함수 포인터 func에 저장

    func(); //print함수 호출

    return 0;
}

결과 : hello!

 

int (*func)(int) = nullptr;

#include <stdio.h>

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

int main()
{
    int (*func)(int, int);
    int result;

    func = add; //add함수의 주소값을 함수포인터 func에 저장

    result = func(10, 20); //함수포인터 func를 add함수처럼 사용

    printf("%d\n", result);

    return 0;
}

결과 : 30

 

int (*func[4])(int, int) = {};

#include <stdio.h>

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

int sub(int a, int b)
{
    return a - b;
}

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

int div(int a, int b)
{
    return a / b;
}

int main()
{
    int (*func[4])(int, int) = {add, sub}; //func함수 포인터배열에 add, sub 함수 초기화

    func[2] = mul; //mul함수 주소값 저장
    func[3] = div; //div함수 주소값 저장

    printf("%d ", func[0](4, 4)); //add함수 호출
    printf("%d ", func[1](4, 4)); //sub함수 호출
    printf("%d ", func[2](4, 4)); //mul함수 호출
    printf("%d ", func[3](4, 4)); //div함수 호출

    return 0;
}

결과 : 8 0 16 1

 

void print(int (*func)(int, int))

{

}

#include <stdio.h>

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

void print(int (*func)(int, int)) //매개변수 함수포인터
{
    printf("%d\n", func(10, 20)); //add함수 호출
}

int main()
{
    print(add); //func함수 포인터에 add함수 주소값 저장

    return 0;
}

결과 : 30

 

int (*func(int x, int y))(int, int)

{

}

#include <stdio.h>

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

int (*func(int x, int y))(int, int)
{
    printf("%d %d ", x, y); //func함수포인터의 매개변수 x, y
    return add; //add함수 반환
}

int main()
{
    printf("%d\n", func(1, 2)(30, 40)); //1,2는 func함수포인터에 30,40은 add함수에 전달

    return 0;
}

결과 : 1 2 70

728x90

'C > 개념, 이해' 카테고리의 다른 글

char , wchar_t C언어  (0) 2021.11.19
const 포인터 C언어  (0) 2021.11.18
volatile 변수 C언어  (0) 2021.11.18
비트연산자와 사용예시 C언어  (0) 2021.11.18

댓글