#include <stdio.h>
struct Structure {
int a;
void (*function)(struct Structure *);
};
void foo(struct Structure *a) {
if (a->function == NULL) a->function = foo;
a->a++;
}
int main(void) {
struct Structure a = {42, foo};
struct Structure b = {0}; // don't call b.function just yet!!
a.function(&b); // foo(&b)
b.function(&a); // foo(&a)
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3QgU3RydWN0dXJlIHsKICAgIGludCBhOwogICAgdm9pZCAoKmZ1bmN0aW9uKShzdHJ1Y3QgU3RydWN0dXJlICopOwp9OwoKdm9pZCBmb28oc3RydWN0IFN0cnVjdHVyZSAqYSkgewogICAgaWYgKGEtPmZ1bmN0aW9uID09IE5VTEwpIGEtPmZ1bmN0aW9uID0gZm9vOwogICAgYS0+YSsrOwogICAgcHJpbnRmKCIlZFxuIiwgYS0+YSk7Cn0KCmludCBtYWluKHZvaWQpIHsKICAgIHN0cnVjdCBTdHJ1Y3R1cmUgYSA9IHs0MiwgZm9vfTsKICAgIHN0cnVjdCBTdHJ1Y3R1cmUgYiA9IHswfTsgLy8gZG9uJ3QgY2FsbCBiLmZ1bmN0aW9uIGp1c3QgeWV0ISEKICAgIGEuZnVuY3Rpb24oJmIpOyAvLyBmb28oJmIpCiAgICBiLmZ1bmN0aW9uKCZhKTsgLy8gZm9vKCZhKQp9Cg==