Your assumption is correct: memcpy doesn't change any pointers.

It only copies data from the from the second pointer to the dest. So you can use it safely without worrying about getting another ptr back.

Also:

Code:
ptr1 = memcpy(ptr1, ptr2, len);
is equal to:

Code:
memcpy(ptr1, ptr2, len);
ptr1 = ptr1;
No need to worry about the return value, if you are setting ptr1 to the return value!