It's undefined, because ip doesn't point to anything definite.

If you have something like this instead:
Code:
int a[10];
int *ip = &a[0];
ip++;
*ip++=0;
then this will be defined; ip will point to a[1], and the command will dereference and postincrement ip, and write 0 to the resulting address (which is a[1]) and leave ip pointing at a[2].

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.