int num =*iptr++;//1) In this expression the value of 'i' is assigned to num. And an attempt of post incrementing the address stored in *iptr is done as side effect.
printf("Pointer: %p\n",(void*)iptr);//2) The address of *iptr is not incremented. If it was then the value of 'i' would not be printed instead it would print the incremented address itself.
printf("Post increment: %p\n",(void*)iptr++);//3) The address of *iptr will be post incremented (which didn't happen in case of num). But for now the value of 'i' will be printed.
printf("After increment: %p\n",(void*)iptr);//4) Now the incremented address stored in *iptr will be displayed as there is no value assigned to that address.