가능한 중복 :
What is the point of function pointers?포인터가 함수를 사용해야하는 이유는 무엇입니까?
는이 코드
void (*foo)(int);
을 보았다 그리고 나는 그것이 작동하려면 포인터 이해했다.
다른 기능을 가리켜 야하는 이유는 무엇입니까?
가능한 중복 :
What is the point of function pointers?포인터가 함수를 사용해야하는 이유는 무엇입니까?
는이 코드
void (*foo)(int);
을 보았다 그리고 나는 그것이 작동하려면 포인터 이해했다.
다른 기능을 가리켜 야하는 이유는 무엇입니까?
qsort
에 제공된 비교 함수와 같이 프로그램 흐름에 따라 변경 될 수있는 핸들러 함수를 저장하는 데 사용할 수 있습니다.
void (*my_handler)(int);
void set_handler(void(*fn)(int)) {
my_handler = fn;
}
void do_stuff() {
// ...
my_handler(x); // using a custom handler
}
if (something) {
set_handler(my_function_1);
}
else set_handler(my_function_2);
do_stuff();
당신은 정렬 알고리즘을위한 compairer를 주입 할 수 있습니다. 따라서 일부 로직을 외부에서 제외 할 수 있습니다.
또는 일부 이벤트 처리를 위해이 메서드를 사용하여 콜백을 구현할 수 있습니다.
콜백에는 일반적으로 함수 포인터가 사용됩니다. 예를 들어, 일부 무거운 작업을 수행 비동기 기능을 상상하고는 완료되면 통지 할 : 당신이 그 함수를 호출 할 때 즉시 반환, 그래서 그것의 자신의 스레드에서 실행
void doWork(void (*foo)(int));
. 완료 시점을 어떻게 알 수 있습니까? 당신은 당신이 일을 끝낼 때 사용자가 제공하는 함수를 호출하도록 지시 :
void myFoo(int n);
및 doWork()
에 있다고 통과 :
doWork(myFoo);
지금
doWork()
완료, 그것은
myFoo()
를 호출 할 때.
이것은 콜백의 한 가지 용도 일 뿐이지 만 가장 일반적인 것입니다.