Is it possible to pass a function pointer as an argument to a function in C?
If so, how would I declare and define a function which takes a function pointer as an argument?
Is it possible to pass a function pointer as an argument to a function in C?
If so, how would I declare and define a function which takes a function pointer as an argument?
Definitely.
void f(void (*a)()) {
a();
}
void test() {
printf("hello world
");
}
int main() {
f(&test);
return 0;
}
Let say you have function
int func(int a, float b);
So pointer to it will be
int (*func_pointer)(int, float);
So than you could use it like this
func_pointer = func;
(*func_pointer)(1, 1.0);
/*below also works*/
func_pointer(1, 1.0);
To avoid specifying full pointer type every time you need it you coud typedef
it
typedef int (*FUNC_PTR)(int, float);
and than use like any other type
void executor(FUNC_PTR func)
{
func(1, 1.0);
}
int silly_func(int a, float b)
{
//do some stuff
}
main()
{
FUNC_PTR ptr;
ptr = silly_func;
executor(ptr);
/* this should also wotk */
executor(silly_func)
}
I suggest looking at the world-famous C faqs.
This is a good example :
int sum(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int mathOp(int (*OpType)(int, int), int a, int b)
{
return OpType(a, b);
}
int main()
{
printf("%i,%i", mathOp(sum, 10, 12), mathOp(div, 10, 2));
return 0;
}
The output is : 22, 5
As said by other answers, you can do it as in
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
However, there is one special case for declaring an argument of function pointer type: if an argument has the function type, it will be converted to a pointer to the function type, just like arrays are converted to pointers in parameter lists, so the former can also be written as
void qsort(void *base, size_t nmemb, size_t size,
int compar(const void *, const void *));
Naturally this applies to only parameters, as outside a parameter list int compar(const void *, const void *);
would declare a function.
Check qsort()
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
The last argument to the function is a function pointer. When you call qsort()
in a program of yours, the execution "goes into the library" and "steps back into your own code" through the use of that pointer.
For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...
最好、最小、最快、开放的来源、C/C++ 3d 提供方(在3ds max模型的支持下),而不是通用公平市价,
Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...
I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...
I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...
I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...
Is there anything other than DDD that will draw diagrams of my data structures like DDD does that runs on Linux? ddd is okay and runs, just kind of has an old klunky feeling to it, just wanted to ...
Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...