본문 바로가기
dev, tech/c, c++

포인터 #5 (함수포인터)

by 구띵 2006. 4. 6.

함수 포인터

 

- 코드를 가리키는 포인터

 

예)

 

int sigma(int n)

{

      int r;

      for(r=0;n>0;n--)

             r+=n;

      return r;

}

 

위와 같은 sigma()함수를 가리키는 포인터는 다음과 같이 정의될 수 있다.

 

    int (*fptr)(int);

 

가리킬 함수의 리턴 값의 형과 인자리스트에서 이름을 뺀 데이터형만을 나열한 뒤에 포인터의 이름 앞에 *를 붙이고 괄호를 씌우면 된다.

 

 그러면, fptr에 주소를 대입하려면 어떻게 하여야 할까? fptr은 데이터를 가리키는 포인터가 아니라, 코드를 가리키는 주소이기 때문에 어떤 함수의 시작 주소를 fptr이 가리켜야 한다.

 ( - 어떤 함수의 시작 주소는 함수명 그 자체이다.)

 

  fptr = sigma;    /* sigma() 와 같이 쓰면 안됨 */

 

이렇게 되면, 다음과 같은 문장은 완전히 같은 것이다.

 

sum = sigma(100);

sum - fptr(100);       또는     sum = (*fptr)(100);

 

 

함수 포인터의 사용 예 >

    - 그래픽 라이브러리를 작성한다고 할 때, 그래픽 보드에 따라서 제어 방법이 다르기 대문에 함수의 구성이 매우 어렵다. 이때는 기능을 분류한 뒤에 각 기능별로 각 그래픽 보드별로 함수를 작성한다. 그리고 난 후에 각 기능을 하는 함수 포인터를 만들어 놓고, 사용자의 그래픽 보드에 맞는 함수를 이 함수 포인터에 대입해두면 간단하게 라이브러리를 그래픽 보드에 상관 없이 사용할 수 있다.

 

   - qsort()라는 라이브러리 함수는 데이터형에 관계 없는 정렬 방법을 제공하기 위하여,

     void형 포인터와 함수 포인터를 이용한다.

 

 

댓글