diff options
| -rw-r--r-- | c.html.markdown | 24 | 
1 files changed, 24 insertions, 0 deletions
| diff --git a/c.html.markdown b/c.html.markdown index 69bf099e..fba587fc 100644 --- a/c.html.markdown +++ b/c.html.markdown @@ -323,6 +323,30 @@ str_reverse(c);  printf("%s\n", c); // => ".tset a si sihT"  */ +/*  +Functions are located in known memory addresses, so they can be called  +through function pointers. 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 alternate but equally valid syntax for calling it. +} + +/* +As long as function signatures match, you can assign any function to the same pointer. +Useful for passing handlers (or callback functions) around. +Function pointers are usually typedef'd for simplicity and readability, as follows: + +typedef void (*my_fnp_type)(char *); +... +my_fnp_type f; +*/ +  ///////////////////////////////////////  // User-defined types and structs  /////////////////////////////////////// | 
