함수포인터
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
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 14 |
[알아봅시다][COMPUTERS] MS, 세상 뒤집을 양자 칩 공개... 수년내 AI 학습속도 100배
| 졸리운_곰 | 2025.02.20 | 279 |
| 13 |
[알아봅시다][COMPUTERS] [양자역학 100년] 양자컴은 수출 통제 전략물자…"핵심 공급망 조기 편입 시급"(중)
| 졸리운_곰 | 2025.01.02 | 240 |
| 12 |
[알아봅시다][COMPUTERS] [양자역학 100년] "삼성 위기 불러온 HBM 경쟁, 양자역학에서 비롯"(상)
| 졸리운_곰 | 2025.01.01 | 284 |
| 11 | [알아봅시다][computers] 우여곡절 끝 가동(?)…OK저축은행 차세대 가동 후폭풍 | 졸리운_곰 | 2023.10.14 | 177 |
| 10 | [알아봅시다][computers] <초점>예견된 실패 OK저축은행 차세대, 향방은 | 졸리운_곰 | 2023.10.14 | 242 |
| 9 |
[알아봅시다][IT 신기술] 베어 메탈이란? 베어메탈(bare-metal) 이란..
| 졸리운_곰 | 2021.05.03 | 269 |
| 8 |
국내 연구진 “충전없이 반영구적 사용하는 배터리 개발”
| 졸리운_곰 | 2020.07.15 | 358 |
| 7 |
원자 하나하나에 정보 담는 신개념 메모리 '저장용량 1000배로 뛴다'
| 졸리운_곰 | 2020.07.04 | 243 |
| 6 |
프록시 서버 구축하기
| 졸리운_곰 | 2020.06.20 | 2877 |
| 5 |
Why real neurons learn faster : 왜 실제 뇌 신경망은 더 빠른가?
| 졸리운_곰 | 2019.01.24 | 399 |
| 4 |
2018 년 미국 및 전 세계적 인터넷 동향, 분석 & 현황
| 졸리운_곰 | 2018.01.27 | 356 |
| 3 | [빅데이터란 무엇인가?] What is big data? [IBM} | 졸리운_곰 | 2015.10.13 | 662 |
| 2 |
Social Analytics 소개 및 관련 서비스 TechSensing
| 졸리운_곰 | 2014.11.18 | 656 |
| 1 |
데이터 과학이란? - 미래는 데이터를 제품화하는 회사와 개인에게 달려있다.
| 가을의 곰을... | 2013.12.11 | 2346 |

