#include <stdio.h>
typedef struct {
int x, y;
void(*show)();
} point_t;
point_t *global_point_ptr;
void point_show() {
point_t point = *global_point_ptr;
printf("x = %d, y = %d\n", point.
x, point.
y); }
point_t point(int x, int y) {
point_t r = { x, y, point_show };
return r;
}
point_t *use_point(point_t *p) {
global_point_ptr = p;
return p;
}
int main(void) {
point_t a = point(2, 10);
point_t b = point(-10, 5);
use_point(&a)->show();
use_point(&b)->show();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgeCwgeTsKCXZvaWQoKnNob3cpKCk7Cn0gcG9pbnRfdDsKCnBvaW50X3QgKmdsb2JhbF9wb2ludF9wdHI7Cgp2b2lkIHBvaW50X3Nob3coKSB7Cglwb2ludF90IHBvaW50ID0gKmdsb2JhbF9wb2ludF9wdHI7CglwcmludGYoInggPSAlZCwgeSA9ICVkXG4iLCBwb2ludC54LCBwb2ludC55KTsKfQoKcG9pbnRfdCBwb2ludChpbnQgeCwgaW50IHkpIHsKCXBvaW50X3QgciA9IHsgeCwgeSwgcG9pbnRfc2hvdyB9OwoJcmV0dXJuIHI7Cn0KCnBvaW50X3QgKnVzZV9wb2ludChwb2ludF90ICpwKSB7CglnbG9iYWxfcG9pbnRfcHRyID0gcDsKCXJldHVybiBwOwp9CgoKCmludCBtYWluKHZvaWQpIHsKCXBvaW50X3QgYSA9IHBvaW50KDIsIDEwKTsKCXBvaW50X3QgYiA9IHBvaW50KC0xMCwgNSk7CgkKCXVzZV9wb2ludCgmYSktPnNob3coKTsKCXVzZV9wb2ludCgmYiktPnNob3coKTsKCQoJcmV0dXJuIDA7Cn0K