Yes, when you change stdout, you're effectively redirecting it elsewhere. However, you should not directly assign to stdout like that. If you want to redirect stdout, you should instead use freopen().
You should never directly manipulate FILE objects - you should treat them as opaque types, and only interact with them via the functions in the <stdio> library. Jonathan lists some good reasons why.
From the C99 standard, section 7.19.3, paragraph 6:
The address of the FILE object used to control a stream may be significant; a copy of a
FILE object need not serve in place of the original.