I see that with the precedence thing we were talking past each other for the most part. You are absolutely correct that the pointer version behaves as if the dereference happens first since it happens to the pre-incremented object. So if you were to expand x = *p++ you would rewrite it as x = *p; ++p, dereferencing the pointer first.