I do not see any difference between these three code snips.
Using such method of allocating an array you should not forget that you cannot delete  a[i] except only when i = 0 that is when a is used.
There really is no difference.
However, I haven't done pointer arithmetics in a while, but from what I remember from it, the '4' might be unnecessary and may cause errors. That is because the compiler 'knows' array is a pointer to int, so it will increment by 'sizeof int' steps.