diff options
author | Kamil Kaminski <kyle@kkaminsk.com> | 2012-02-24 21:57:07 -0600 |
---|---|---|
committer | Kamil Kaminski <kyle@kkaminsk.com> | 2012-02-24 21:57:07 -0600 |
commit | bcf256a1a2764cb61315f5c582b7eed62206f677 (patch) | |
tree | f3413ea8875374c7fbb88e2aec7c385ae70fa899 /funcptrs.c | |
parent | d18964c5fe9d745eeb9b88b003f01c43dadcf018 (diff) | |
download | sandbox-bcf256a1a2764cb61315f5c582b7eed62206f677.tar.gz sandbox-bcf256a1a2764cb61315f5c582b7eed62206f677.tar.bz2 sandbox-bcf256a1a2764cb61315f5c582b7eed62206f677.zip |
add func ptr example and ls script
Diffstat (limited to 'funcptrs.c')
-rw-r--r-- | funcptrs.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/funcptrs.c b/funcptrs.c new file mode 100644 index 0000000..1d49418 --- /dev/null +++ b/funcptrs.c @@ -0,0 +1,41 @@ +#include <stdio.h> +#include <stdlib.h> + +void say1(void) +{ + printf("hello, world!\n"); +} + +void say2(void) +{ + printf("hello bro!\n"); +} + +/* quite silly function, it is better to return an int and modify a parameter */ +void (*swap_say( void (*current_say)(void) )) (void) +{ + if (!current_say) + return NULL; + + void (*ret)(void) = NULL; + + if (current_say == &say1) + ret = say2; + else + ret = say1; + + return ret; +} + +int main(int argc, char **argv) +{ + void (*say_fptr)(void) = say1; + say_fptr(); + + /* now modfiy the above func ptr */ + say_fptr = swap_say(say_fptr); + say_fptr(); + + return 0; +} + |