Taking baby-developer steps

15. 함수 포인터 - 함수 포인터/ 함수 포인터 선언 /매개 변수와 반환 자료형이 있는 포인터 / 매개 변수와 반환 자료형이 없는 포인터 / 함수 포인터를 반환하여 사용하기 본문

CS 지식/C언어_basic

15. 함수 포인터 - 함수 포인터/ 함수 포인터 선언 /매개 변수와 반환 자료형이 있는 포인터 / 매개 변수와 반환 자료형이 없는 포인터 / 함수 포인터를 반환하여 사용하기

Surin Lee 2021. 3. 31. 17:57

함수 포인터

C언어에서는 함수의 이름을 이용해 특정한 함수를 호출한다. 함수의 이름은 메모리 주소를 반환한다. 이는 배열의 이름이 메모리 주소 값을 반환(첫 번째 원소의 주소값과 같음)하는 것과 같은 맥락이다.

ex)함수의 이름이 메모리 주소를 반환하는 것을 확인

#include <stdio.h>

void function(){
    printf("Thsi is my function");
}

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

 

함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언 할 수 있다. 함수 포인터를 이용하면 형태가 같은 서로 다른 기능의 함수를 선택적으로 사용할 수 있다.

반환 자료형(*선언할 함수 포인터의 이름)(매개변수) = 함수명 ;

이때, 반환 자료형과 매개변수는 해당 함수가 원래 가지고 있던 성질을 그대로 가져와야 한다.

 

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

#include <stdio.h>

void myFunction(){
    printf("This is my function\n");
}

void yourFunction(){
    printf("This is your function\n");
}

int main(void){
    void(*fp)()=myFunction;
    fp();
    fp = yourFunction;
    fp();
    system('pause');
    return 0;
}
This is my function
This is your function

 

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

#include <stdio.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,5));
    fp = sub;
    printf("%d\n", fp(10,5));
    return 0;
}
15
5

 

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

#include <stdio.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;
}
10과 20을 더해보겠습니다
30

 

요약

  1. C언어 프로그램의 모든 함수는 내부적으로 포인터 형태로 관리 할 수 있다.
  2. 함수 포인터는 자주 사용되지 않지만 알고 있으면 컴퓨터의 구조를 이해하는데 도움을 준다.

함수 포인터는 고급문법이라 자주 사용되진 않지만, 필요할 때 찾아서 쓸 줄 알아야 한다.

Comments