함수포인터
2009.11.12 07:27
함수포인터 |
|
[�렪吏�]
설명 #
"함수포인터"는 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
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 15 |
데이터센터 패브릭의 진화와 나아가야할 방향
| 졸리운_곰 | 2019.02.27 | 308 |
| 14 |
가트너, 2019년 10대 전략 기술 트렌드 발표
| 졸리운_곰 | 2019.02.23 | 219 |
| 13 |
방송대 프라임칼리지가전하는 미래 유망 직업
| 졸리운_곰 | 2019.01.28 | 257 |
| 12 | [김진호 교수의 재미있는 통계] (42) 헷갈려하는 퍼센트 포인트 | 졸리운_곰 | 2018.06.08 | 275 |
| 11 |
[주간조선] 가상화폐는 시작일 뿐, 블록체인 3.0 시대가 오면…
| 졸리운_곰 | 2018.01.28 | 223 |
| 10 |
2018년 전자정부 10대 기술트렌드 살펴보니
| 졸리운_곰 | 2018.01.23 | 275 |
| 9 | [알아봅시다] 춘천의 한림대 경제학과가 앓고있다는 이 질병 : 자기애성 성격장애 | 졸리운_곰 | 2017.08.05 | 289 |
| 8 | 란체스터 전략(Lanchester strategy)이란? | 졸리운_곰 | 2016.10.08 | 440 |
| 7 |
[알아봅시다] 아포스티유(Apostille)’가 무엇인가요?
| 졸리운_곰 | 2015.09.08 | 639 |
| 6 |
[과학 오딧세이] 성냥갑 크기로 접는 종이 배터리 나왔다
| 졸리운_곰 | 2015.06.13 | 519 |
| 5 |
幽靈(유령) 잡는 과학자들
| 졸리운_곰 | 2014.11.13 | 421 |
| 4 | 반도체업계, 사물인터넷·웨어러블 선점 경쟁 시작 | 졸리운_곰 | 2014.10.30 | 392 |
| 3 | 2014년에 뜰만한 정보통신기술 '베스트 10'…입는 컴퓨터에서 전자지갑까지 | 가을의 곰을... | 2013.12.13 | 1729 |
| 2 | 고연봉 IT 기술직 | 가을의 곰을... | 2013.11.23 | 1751 |
| 1 | 가트너(Gartner), 2014년 10대 전략 기술 발표 | 가을의 곰을... | 2013.11.23 | 3864 |

