I was going to reply that. But I decided to test, because I'm a little unclear on the subject in reference to pointers. I really need to read a reference.
Anyway, I'm not sure how its happening. But it appears *z++ will change y to point to the next (or previous, can't tell) value in memory, and then you would be assigning the value pointed to by z to w. The thing is that the assignment doesn't carry through when its in one statement for some reason. However if you split the statement up it will work. Which is almost exactly what the OP asked if it was doing.
Pointers just became fun.
Code:
#include <iostream>
int main()
{
float a = 10.0;
float b = 5.0;
float c = 2.5;
float* y = &c;
std::cout << *y << std::endl; //Output: 2.5
*y--; //no longer points to c, and now points to undefined
std::cout << *y << std::endl; //Output: something x10^-39
*y++; //no longer points to undefined, and now points back to c
std::cout << *y << std::endl; //Output: 2.5
*y++; //no longer points to c, and now points to b
std::cout << *y << std::endl; //Output: 5.0
*y++; //no longer points to b, and now points to a
std::cout << *y << std::endl; //Output: 10.0
++*y; //increments the value of pointed to by the pointer
std::cout << *y << std::endl; //Output: 11.0
++*y; //increments the value of pointed to by the pointer
std::cout << *y << std::endl; //Output: 12.0
--*y; //decrements the value of pointed to by the pointer
std::cout << *y << std::endl; //Output: 11.0
*y--; //no longer points to a, and now points to b
*y = c; //change the value pointed to by the pointer (b) to c
std::cout << b << std::endl; //Output: 2.5
*y++ = a; //no longer points to b, and now points back to a, and attempt to change the value pointed to by the pointer (b) to c
std::cout << b << std::endl; //Output: 5.0 (should output 2.5 because its being assigned c's value, but outputs a's value of 11.0)
std::cin.get();
}
Edit: Looks like 7stud and Daved explained it. But still, code to match here.
Edit: I understand now. I forgot. The reason *y++ = a; doesn't work is because it increments the pointer to the next place after the assignment.