함수포인터 |
[�렪吏�]
설명 #
"함수포인터"는 C언어에서 자주 쓰이는 기본 용법중 하나입니다. 정의는 다음과 같습니다.
선언된 함수가 저장된 메모리 번지값을 담고 있는 포인터 변수하지만 이것을 왜 보통의 포인터와는 달리 특별취급하냐면 다음과 같은 이유 때문입니다.
- 일반 포인터 변수와는 조금 다르게 보이는 문법으로 선언됩니다. 예를 들어 함수 포인터 변수는 다음과 같이 선언합니다. (functionPtr이 포인터 변수명이 됩니다)
void (*functionPtr)(const char *s_)
- 함수포인터는 실행부분을 가리키는 포인터 변수인탓에 () 연산자를 사용할 수 있습니다. 즉, 위의 functionPtr은 아래와 같이 실행가능합니다.
functionPtr("바보나라~")
[�렪吏�]
예제 #
아래 예제는 함수포인터를 활용한 간단한 예제입니다.
#include <stdio.h>void testout1(const char *s) { printf("시험출력1:%s\n", s);}void testout2(const char *s) { printf("시험출력2:%s\n", s);}// 함수포인터 변수void (*funcPtr)(const char *s);int main() { // 함수포인터를 testout1, testout2로 각각 대입해보고 실행해본다. funcPtr = testout1; funcPtr("테스트"); funcPtr = testout2; funcPtr("테스트");}
실행결과는 아래와 같습니다.
시험출력1:테스트시험출력2:테스트main()안에서는 funcPtr만 실행했지만 마치 testout1, testout2를 각각 실행한 것과 같은 효과가 있음을 알 수 있습니다.
[�렪吏�]
typedef 거는 법 #
함수포인터를 어떤 포인터 변수로서 활용하고 싶을 때 typedef를 활용하면 매우 편리합니다. 실제로 win32 API에서는 윈도우 프로시저 함수포인터형으로 WNDPROC라는 타입이 있습니다. (이부분을 보면 어느정도 사용법에 대한 느낌이 올겁니다) winuser.h 헤더화일에서 검색해보면 다음과 같이 선언되어있습니다.
typedef LRESULT(CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
실제로 사용될 때에는 다음과 같이 사용됩니다.
LRESULT CALLBACK winproc1(HWND,UINT,WPARAM,LPARAM) { };...WNDPROC winprocPtr = winproc1;...꽤 유용한 문법이니 알아두시면 좋습니다.
'기본 카테고리' 카테고리의 다른 글
중국 달기 (0) | 2009.11.20 |
---|---|
GTK+ 프로그래밍 튜토리얼 (그놈한국) (0) | 2009.11.15 |
의공학(의용공학)의 현황 및 미래전망 기사 (0) | 2009.11.08 |
넷북 올 하반기 `이렇게 바뀐다` (0) | 2009.11.07 |
` 名 言 錄`(리더스다이제스트 1983.3--1988.1) (0) | 2009.11.01 |