struct foo { int i; int j; }; int bar (struct foo *k, int k2, int f, int f2) { int *p, *q; int res; if (f) p = &k->i; else p = &k->j; res = *p; k->i = 1; if (f2) q = p; else q = &k2; return res + *q; } extern void abort (void); int main() { struct foo k; k.i = 0; k.j = 1; if (bar (&k, 1, 1, 1) != 1) abort (); return 0; }