C언어

함수 포인터

khon98 2020. 12. 8. 22:05

함수 포인터

1.

- C언어에서는 함수의 이름을 이용해 특정한 함수를 호출함

- 함수 이름은 메모리 주소를 반환함

#include <stdio.h>
#include <stdlib.h>

void function(){
    printf("It's my function");
}

int main(void) {
    printf("%d\n", function);
    system("pause");
    return 0;
}

 

2.

- 함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언할 수 있음

- 함수 포인터를 이용하면 형태가 같은 서로 다른 기능의 함수를 선택적으로 사용할 수 있음

 

반환 자료형(*함수명)(매개변수) = 함수명;

반환 자료형(*이름)(매개변수) = 함수명;

 

* 매개변수 및 반환 자료형이 없는 함수 포인터

#include <stdio.h>
#include <stdlib.h>

void myFunction(){
    printf("It's my function.\n");
}

void yourFunction(){
    printf("It's your function.\n");
}

int main(void){
    void(*fp)() = myFunction;
    fp();
    fp = yourFunction;
    fp();
    system("pause");
    return 0;
}

 

* 매개변수 및 반환 자료형이 있는 함수 포인터

#include <stdio.h>
#include <stdlib.h>

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

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

int main(void) {
    int(*fp) (int, int) = add;
    printf("%d\n", fp(10, 3));
    fp = sub;
    printf("%d\n", fp(10, 3));
    system("pause");
    return 0;
}

 

* 함수 포인터를 반환하여 사용하기

#include <stdio.h>
#include <stdlib.h>

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

int(*process(char *a))(int, int) {
    printf("%s\n", a);
    return add;
}

int main(void){
    printf("%d\n", process("10과 20을 더한 값을 출력")(10, 20));
    system("pause");
    return 0;
}

 

 

- C언어 프로그램의 모든 함수는 내부적으로 포인터 형태로 관리할 수 있음

- 함수 포인터는 자주 사용되지 않지만 알고 있으면 컴퓨터의 구조를 이해하는데 도움을 줌