/*
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;
}