$ cat t.c #include #include char b; int x; char a; int main(int c, char *v[]) { char *p; printf("c:%d\n", c); if (c & 2) p = &a; else p = 0; memcpy(p, &b, c & 1); if (p) x=1; else x=0; printf("x:%d meaning p is %snull\np:%p\n", x, x?"non-":"", p); } $ /home/julien/prefix/gcc/fd7c447/bin/gcc -O2 -std=c11 t.c $ ./a.out 2 3 4 c:4 x:1 meaning p is non-null p:(nil) $ /home/julien/prefix/gcc/fd7c447/bin/gcc -v … gcc version 4.9.2 20140818 (prerelease) (fd7c4470c415022ad8e98818a0b7ed6ce5044715)