WinCNT

C 언어 - 15. 함수 포인터 본문

Study/C

C 언어 - 15. 함수 포인터

WinCNT_SSS 2021. 9. 27. 01:42

함수 포인터

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

  1. 함수 이름은 주소값을 반환한다
    #include<stdio.h>
    void function()
    {
        printf("It's my function.");
    }
    
    int main(void)
    {
        printf("%d\n", function); //-1202383931, 함수의 주소값
        system("pause");
        return 0;
    }​
  2. 함수 포인터특정한 함수의 반환 자료형을 지정하는 방식으로 선언 가능하다
    반환 자료형 (*이름)(매개변수) = 함수명;
  3. 함수 포인터를 이용하면 형태가 같은, 서로 다른 기능의 함수를 선택적으로 사용 가능하다
    형태가 같은 여러 개의 함수같은 명령어로 호출 가능하다
     

함수 포인터의 형태 및 예시

  1. 매개변수 및 반환 자료형이 없는 함수 포인터
    //매개변수 및 반환 자료형이 없는 함수 포인터
    #include<stdio.h>
    
    void myFunction()
    {
        printf("It's my function.\n");
    }
    
    void yourFunction()
    {
        printf("It's Your function.\n");
    }
    
    void main(void)
    {
        //반환 자료형 (*이름)(매개변수) = 함수명;
        void(*fp)() = myFunction;
        fp();
    
        //반환 자료형 (*이름)(매개변수) = 함수명;
        fp = yourFunction;
        fp(); //같은 명령어로 호출
    
        system("pause");
        return 0;
    }​​
  2. 매개변수 및 반환 자료형이 있는 함수 포인터
    #include<stdio.h>
    
    int add(int a, int b)
    {
        return a + b;
    }
    
    int sub(int a, int b)
    {
        return a - b;
    }
    
    void main(void)
    {
        int(*functionPointer)(int, int) = add;
        printf("%d\n", functionPointer(10, 5)); //15
    
        functionPointer = sub;
        printf("%d\n", functionPointer(10, 5)); //5
    
        system("pause");
        return 0;
    }
  3. 함수 포인터를 반환하여 사용하기
    #include<stdio.h>
    
    int add(int a, int b)
    {
        return a + b;
    }
    
    //process라는 함수 포인터 자체에 (char* a)라는 매개변수가 있고,
    //add라는 함수 포인터를 반환하는 함수
    //(int, int)는 add의 매개변수
    int (*process(char* a))(int, int)
    {
        printf("%s\n", a);
        return add;
    }
    
    void main(void)
    {
        printf("%d\n", process("10과 20을 더해보겠습니다.")(10, 20));
    
        system("pause");
        return 0;
    }​