5.27 Function pointers |
The example is about as simple as it get. There are two different
functions, one twice
, doubles a number, and half
, divides a
number by two. They are called alternately. The address of the function
called is also printed.
The program:
/* Program to look at function pointers */ /* L Taber April 8, 2001 PCC */ #include <stdio.h> int twice(int x) { return x*2; } /* double number */ int half(int x) { return x/2; } /* divide number by 2 */ int main() { int i; int (*function)(int); for( i=0; i<10; i++) { /* If i is odd, function = twice */ if( i&1 ) function = &twice; else function = ½ /* call function and print results */ /* Print address of function in [ ] */ printf(" f[%p](%i) = %d %c", function, i, function(i), i&1 ? '\n' : ' ' ); } }
The source is available at:
ftp://lt.tucson.az.us/pub/c/function-ptr.c
And the output:
f[0x80483f4](0) = 0 f[0x80483e0](1) = 2 f[0x80483f4](2) = 1 f[0x80483e0](3) = 6 f[0x80483f4](4) = 2 f[0x80483e0](5) = 10 f[0x80483f4](6) = 3 f[0x80483e0](7) = 14 f[0x80483f4](8) = 4 f[0x80483e0](9) = 18
5.27 Function pointers |