diff options
author | sergiokas <sergiokas@gmail.com> | 2013-07-04 11:42:36 -0300 |
---|---|---|
committer | sergiokas <sergiokas@gmail.com> | 2013-07-04 11:42:36 -0300 |
commit | fff3f61e2c64745eb4404ccaf582730e218043cf (patch) | |
tree | fadde7b7c161f0a8f51a97a42d17cbb74ee4375e | |
parent | 0376e0807a796b9c38285e908589b8ef3f2ded21 (diff) |
#102, moving function pointers section to the end of the doc
-rw-r--r-- | c.html.markdown | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/c.html.markdown b/c.html.markdown index 23d97560..f5f28608 100644 --- a/c.html.markdown +++ b/c.html.markdown @@ -323,33 +323,6 @@ 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 *); - -// The used when declaring the actual pointer variable: -// ... -// my_fnp_type f; - - /////////////////////////////////////// // User-defined types and structs /////////////////////////////////////// @@ -390,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 |