Or the two are equal, in which case the program will print "10" (`iq` is the result of casting `q` to an integer, so casting it back will yield the original pointer, or at least a pointer pointing to the same object / location in memory).
The first "optimization" we will perform is to exploit that if we enter the `if` body, we have `iq == ip`, so we can replace all `iq` by `ip`.
-Subsequently the definition of `ip` is inlined:
+The assignment thus becomes `*(char*)ip = 10`.
+Subsequently, the definition of `ip` is inlined:
{% highlight c %}
char p[1], q[1] = {0};
uintptr_t ip = (uintptr_t)(p+1);