Well, yes and no.
Yes, because the second piece of code you provided does indeed do the same thing as the original code. So, in a way, you understood your original code correctly.
No, because your second piece code is not really equivalent to the original one. Remember, it is incorrect to say that postfix ++
operator returns the original value first and increments the pointer later. In C language temporal relationships (what happens "before" and what happens "after") can only be defined by sequence points. The expression
*ptrA++ = *ptrB++;
has no sequence points inside, so there's absolutely no way to say what happens before and what happens after. At the same time, your second variant
*ptrA = *ptrB;
ptrA++;
ptrB++;
explicitly guarantees that increment happens after the dereference, since there's a sequence point at the end of each statement. There's no such guarantee with regard to the first variant. This is what I see as a problem with your interpretation.
In reality it is quite possible that the increment will happen first and the dereference will happen later. For example, the compiler can translate your original expression into something like
tmp1 = ptrA++;
tmp2 = ptrB++;
*tmp1 = *tmp2;
in which case the increment happens first. Or the compiler can translate it into something like
ptrA++;
ptrB++;
*(ptrA - 1) = *(ptrB - 1);
in which case the increment happens first as well.
Once again, remember your interpretation of the original expression is good, but it is just one of the possible interpretations. Never assume that things will happen in the specific order you used in your interpretation.
P.S. About those sequence points: C FAQ, C++ FAQ, Wikipedia