#include <stdio.h>
#include <stdlib.h>
 
struct point1d {
    int x; 
    void (*print)(void const *);
};
 
struct point2d {
    int x, y;
    void (*print)(void const *);     
};
 
void print_point1d( void const * p ) {
    printf( "(%d)\n", ((struct point1d const*)p)->x );
}
 
void print_point2d( void const * p ) {
    printf( "(%d, %d)\n", ((struct point2d const*)p)->x, 
                          ((struct point2d const*)p)->y );
}
 
int main() {
    struct point1d p1 = { .x=1, .print=&print_point1d };
    struct point2d p2 = { .x=3, .y=4, .print=&print_point2d };
    
    p1.print( &p1 );
    p2.print( &p2 );
}