Precedence table
Refer the precedence table operators with higher precedence will be evaluated first.
in your case your using prefix increment ++ which has the same precedence level as deference operator *.
so when you have both in the same expression Associativity of it should be considered which is right to left
++*p will be equivalent to ++(*p) the pointer is deference'd first then the value is incremented.
char *p="abcd";
i.e *p is equal to a and ++ on character will give you b
*++p will be equivalent to *(++p) the pointer is incremented first then deference'd
i.e ++p will point to b in the string then then * deference will give you the b at position 2.
Change your input string you get a different answer. same answer your getting is just as the operation on the first character matches the operation for the second