함수 포인터
- 코드를 가리키는 포인터
예)
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형 포인터와 함수 포인터를 이용한다.
'dev, tech > c, c++' 카테고리의 다른 글
포인터 #6 (배열의 첨자) (0) | 2006.04.06 |
---|---|
함수에서 인자를 넘기는 방식 (0) | 2006.04.06 |
포인터 #4 (void 포인터) (0) | 2006.04.06 |
포인터 #3 ( 포인터의 포인터 ) (0) | 2006.04.06 |
포인터 #2 ( 구조체를 가리키는 포인터 ) (0) | 2006.04.06 |
댓글