mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-24 01:51:38 +00:00
Merge pull request #102 from sergiokas/master
Adding small function pointers example in C
This commit is contained in:
commit
b59bbc949d
@ -363,6 +363,36 @@ int area(rect r){
|
||||
return r.width * r.height;
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// Function pointers
|
||||
///////////////////////////////////////
|
||||
/*
|
||||
At runtime, functions are located at known memory addresses. Function pointers are
|
||||
much likely any other pointer (they just store a memory address), but can be used
|
||||
to invoke functions directly, and to pass handlers (or callback functions) around.
|
||||
However, definition syntax may be initially confusing.
|
||||
|
||||
Example: use str_reverse from a pointer
|
||||
*/
|
||||
void str_reverse_through_pointer(char * str_in) {
|
||||
// Define a function pointer variable, named f.
|
||||
void (*f)(char *); // Signature should exactly match the target function.
|
||||
f = &str_reverse; // Assign the address for the actual function (determined at runtime)
|
||||
(*f)(str_in); // Just calling the function through the pointer
|
||||
// f(str_in); // That's an alternative but equally valid syntax for calling it.
|
||||
}
|
||||
|
||||
/*
|
||||
As long as function signatures match, you can assign any function to the same pointer.
|
||||
Function pointers are usually typedef'd for simplicity and readability, as follows:
|
||||
*/
|
||||
|
||||
typedef void (*my_fnp_type)(char *);
|
||||
|
||||
// The used when declaring the actual pointer variable:
|
||||
// ...
|
||||
// my_fnp_type f;
|
||||
|
||||
```
|
||||
|
||||
## Further Reading
|
||||
|
Loading…
Reference in New Issue
Block a user