Post

[C++] 함수 포인터란? #16

1. 함수 포인터란?

함수 또한 메모리 어딘가에 함수가 저장되고 있습니다.
따라서 그 함수의 위치를 가르키는 것이 함수 포인터 입니다.

2. 함수의 주소 확인하기

함수의 주소를 확인하는 방법은 일반 변수의 주소를 확인하는 것과 비슷합니다.

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

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

int main() {
    printf("pointer: %p\n", sayHello);

    return 0;
}
1
2
pointer: 0x401136

3. 함수 포인터 선언하기

함수 포인터를 나타내는 자료형은 아래와 같이 씁니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

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

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

    func = sayHello;

    func();

    return 0;
}
1
2
Hello

함수 포인터를 사용할 때는 함수의 반환값의 자료형과 매개변수 등이 일치해야 한다는 조건이 있습니다. 또한 sayHello의 메모리 주소를 가르키는 func를 실행한 결과가 sayHello의 실행 결과와 같습니다.

3-1. 매개변수와 반환값이 있는 함수의 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int sumAndPrint(int a, int b) {
    printf("%d + %d = %d\n", a, b, a + b);

    return a + b;
}

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

    func = sumAndPrint;

    int result = func(5, 10);

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

    return 0;
}
1
2
3
5 + 10 = 15
result: 15

위 코드와 같이 작성하면 됩니다.

This post is licensed under CC BY 4.0 by the author.