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.