function_pointers.c
changeset 103 be3fe4a4f097
parent 77 49e0babccb23
child 140 05d42a3737a4
equal deleted inserted replaced
102:b8ff193b1a01 103:be3fe4a4f097
     1 /**
     1 /**
     2  * function_pointers.c
     2  * function_pointers.c
     3  * Copyright (C) 2008 Markus Broeker
       
     4  */
     3  */
     5 
     4 
     6 #include <stdio.h>
     5 #include <stdio.h>
     7 #include <stdlib.h>
     6 #include <stdlib.h>
     8 
     7 
     9 typedef struct T {
     8 int plus (int a, int b)
    10     int a;
       
    11     int b;
       
    12 } T;
       
    13 
       
    14 int plus (T t)
       
    15 {
     9 {
    16     return t.a + t.b;
    10     return a + b;
    17 }
    11 }
    18 
    12 
    19 int minus (T t)
    13 int minus (int a, int b)
    20 {
    14 {
    21     return t.a - t.b;
    15     return a - b;
    22 }
    16 }
    23 
    17 
    24 int func (T t, int (*ptrFunc) (T))
    18 int func (int (*ptrFunc) (int, int), int a, int b)
    25 {
    19 {
    26     return ptrFunc (t);
    20     return ptrFunc (a, b);
    27 }
    21 }
    28 
    22 
    29 int main (int argc, char **argv)
    23 int main (int argc, char **argv)
    30 {
    24 {
    31     T t = {
    25     printf ("Result: %d\n", func (&plus, 10, 20));
    32         .a = 20,
    26     printf ("Result: %d\n", func (&minus, 10, 20));
    33         .b = 10
       
    34     };
       
    35 
       
    36     printf ("Result: %d\n", func (t, &plus));
       
    37     printf ("Result: %d\n", func (t, &minus));
       
    38 
    27 
    39     return EXIT_SUCCESS;
    28     return EXIT_SUCCESS;
    40 }
    29 }