int foo (int i) { int *j = &i; int **k = &j; int ***l = &k; i++; return i; } struct S { int *x, y; }; int u[6]; static inline void add (struct S *a, struct S *b, int c) { *a->x += *b->x; a->y += b->y; u[c + 0]++; a = (struct S *) 0; u[c + 1]++; a = b; u[c + 2]++; } int bar (int i) { int j = i; struct S p[2] = { { &i, i * 2 }, { &j, j * 2 } }; add (&p[0], &p[1], 0); p[0].x = &j; p[1].x = &i; add (&p[0], &p[1], 3); return i + j; } int x = 22; int main (void) { x = foo (x); x = bar (x); return 0; }