typedef void* Ptr; struct A { int i; union { Ptr p; char *q; } u; }; static void foo(struct A *p, char *q) { if (p->i) p->u.p = 0; else p->u.q = q; } void bar(struct A *p, char *q) { foo(p, q); }