It's undefined, because ip doesn't point to anything definite.
If you have something like this instead:
int *ip = &a;
then this will be defined; ip will point to a, and the command will dereference and postincrement ip, and write 0 to the resulting address (which is a) and leave ip pointing at a.
Without the first ip++ in your original code the behaviour will be defined because ip points to a; *ip++=0 sets a to 0 and increments ip, which then points to somewhere undefined in memory, and dereferencing the pointer again will lead to undefined behaviour.