- runtime 값으로 실행할 함수를 결정할 수 있다.
- running program 은 main-memory 안에 임의의 위치를 갖는다.
- 함수와 &함수가 같은 값을 갖는다.
마치 배열에서 배열명이 첫요소의 첫번째 값을 나타내는 것과 같다
- 관례적으로 fn 이름을 사용한다.
* reference
0.
The Function Pointer Tutorials http://www.newty.de/fpt/index.html
1. 함수포인터 한글 http://shinluckyarchive.tistory.com/206
include/linux/fs.h
typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
filldir_t 데이타 타입을 int를 리턴하는 함수 포인터로 선언한다.
* function pointer 선언
Can you tell what the following declaration means?
void (*fn[10]) (void (*)() );
Only few programmers can tell that p is an "array of 10 pointers to a function returning void and taking a pointer to another function that returns void and takes no arguments." The cumbersome syntax is nearly indecipherable. However, you can simplify it considerably by using typedef declarations. First, declare a typedef for "pointer to a function returning void and taking no arguments" as follows:
typedef void (*pfv)();
Next, declare another typedef for "pointer to a function returning void and taking a pfv" based on the typedef we previously declared:
typedef void (*pf_taking_pfv) (pfv);
Now that we have created the pf_taking_pfv typedef as a synonym for the unwieldy "pointer to a function returning void and taking a pfv", declaring an array of 10 such pointers is a breeze:
pf_taking_pfv p[10];
Danny Kalev
1) int (*x)(int, char *, void *);
우선순위에 의해 포인터(*)를 먼저 해석하고 다음에 나오는 ()를 함수로 해석
변수 x 는 포인터인데 이 포인터가 가르키는 곳에 int를 리턴하고 인자 ...를 갖는 함수가 존재한다.
2) int (*x[10])(int, char *, void *);
함수포인터 array
3) int (**x[10])(int, char *, void *)
int myfunc(int a, char* b, void* c)
{
return a;
}
void acallingfunction()
{
int (*x)(int, char*, void*);
x = myfunc;
x(1, "hello", 0);
}
void anothercaller()
{
int (*x)(int, char*, void*);
int (**y)(int, char*, void*);
x = myfunc;
y = &x;
(*y)(1, "hello", 0);
}
http://www.cdecl.org/
void *(x)(int, int);
declare x as function (int, int) returning pointer to void
void *(*x)(int, int);
declare x as pointer to function (int, int) returning pointer to void
<소스코드 예제>
- <linux-2.4>/drivers/char/lcd.c
static linkcheck_func_t linkcheck_callbacks[MAX_INTERFACES];
- <linux-2.4>/drivers/char/nwbutton.c
static struct button_callback button_callback_list[32];
- <linux-2.6>/sound/isa/cmi8330.c
typedef int (*snd_pcm_open_callback_t)(snd_pcm_substream_t *);