/* Seeing how to pass around function pointers, do type-casting for different pointers... */ #include <stdio.h> #include <stdlib.h> //typedef enum {INT_T, CHAR_T, DOUBLE_T} type_t; typedef struct DATA { void *d; int size; // type_t dataType; void (* print) (void *, int ); } data_t; void print_int(void *d, int size) { // suppose d points to an int // type-cast d to be an int * int *p_i = (int *)d; printf("%d\n", *p_i); } void print_char(void *d, int size) { char *p_c = (char *)d; printf("%c\n", *p_c); } void print_double(void *d, int size) { double *p_d = (double *)d; printf("%lf\n", *p_d); } int main(int argc, char * argv[]) { int x = 42; //print_int(&x, sizeof(x)); char c = 'A'; //print_char(&c, sizeof(c)); double d = 3.14; //print_double(&d, sizeof(d)); data_t A[5]; // set A[0] to be x. A[0].d = &x; A[0].size = sizeof(x); A[0].print = print_int; // A[0].type_t = INT; //A[0].print(A[0].d, A[0].size); // set A[1] to be c A[1].d = &c; A[1].size = sizeof(c); A[1].print = print_char; //A[1].print(A[1].d, A[1].size); // set A[2] to be d A[2].d = &d; A[2].size = sizeof(d); A[2].print = print_double; //A[2].print(A[2].d, A[2].size); for(int i=0; i <= 2; i++) { A[i].print(A[i].d, A[i].size); if (A[i].print == print_int) printf(" integer\n"); } return 0; }