가능한 중복 :
How do you pass a function as a parameter in C?함수를 매개 변수로 전달할 수 있습니까?
것이 가능 C의 파라미터로서의 기능을 전달입니까? 그렇다면 어떻게?
가능한 중복 :
How do you pass a function as a parameter in C?함수를 매개 변수로 전달할 수 있습니까?
것이 가능 C의 파라미터로서의 기능을 전달입니까? 그렇다면 어떻게?
아니요, '함수'를 매개 변수로 전달할 수 없습니다. 그러나 대신 함수에 대한 포인터를 전달할 수 있습니다.
함수 호출에 대한 괄호없이 이름으로 함수를 참조 할 때 함수에 대한 포인터를 참조하고 있습니다. ') (SQRT'여기서
#include <math.h>
#include <stdio.h>
static void generator(double lo, double hi, double inc, double (*function)(double))
{
double x;
for (x = lo; x < hi; x += inc)
printf("x = %6g; f(x) = %6g\n", x, (*function)(x))
}
int main(void)
{
generator(0.0, 1.0, 0.02, sin);
generator(0.0, 1.0, 0.02, cos);
generator(0.0, 1.0, 0.02, sqrt);
return(0);
}
, 기능 '죄()', 'COS() 및 : 따라서, 예를 들어, 우리는 수학적 함수 값 테이블을 생성하는 기능을 고려할 수있다 모두 동일한 프로토 타입 스키마를가집니다 : double 인수를 취하여 double 값을 반환하는 함수.
이generator(0.0, 1.0, 0.02, sin());
내가 컴파일 오류의 무리를 얻을 것이다 - 때문에 하나의 '죄()'인수를 기대하고, 또 다른 이유로 '발전기()'함수에 대한 포인터를 기대하지를 : 내가 잘못 쓴 경우합니다 마지막 인수로서의 double 값 의
(또한 좋은 프로그램은 적어도 그것을 계산하는 기능을 식별 할 것이며, 이중 숫자의 반복 단위의 정확성에 대한 좋은 생각이 아니다 있습니다. 그것은하지만, 예.)
을 물론 함수 포인터를 사용할 수 있습니다.
#include <stdio.h>
typedef void (*bar_callback)(void);
void foo(void)
{
puts("foo");
}
void bar(bar_callback callback)
{
puts("bar");
callback();
}
int main(int argc,char **argv)
{
bar(foo);
return 0;
}
예. 함수가 아닌 그 자체는이지만 함수를 가리키는 포인터입니다.
qsort()
을 참조하십시오.
int cmp(const void *a, const void *b) { /* ... */ }
/* ... */
qsort(data, nelems, sizeof *data, cmp); /* pass the function `cmp` to qsort() */
중복 HTTP : //stackoverflow.com/questions/9410/how-do-you-pass-a-function-as-a-parameter-in-c – quamrana