33
Depending on the context of the ampersand it can mean 2 different things. The answer to your specific question is that it's a reference, not "the address of". They are very different things. It's very important to understand the difference.
The reason to make parameters const is to ensure that they are not changed by the function. This guarantees the caller of the function that the parameters they pass in will not be changed.
In C++ type declarations, the ampersand means "reference". In this case operator << returns a reference to an ostream object.
Since it actually returns *this it's actually the same ostream object, and means you can chain calls to operator <<, similar to this:
os << "Hello" << " " << "World" << endl;