No. Formally, it's a value, not an object, so it isn't
"passed", any more than the constant 42 is passed when you use
it. In both cases, it's up to the compiler to ensure that you
get the right value.
And of course, it also depends on what you mean by "stack".
Since the language supports recursive functions, all parameters
and local variables can be thought of as being on a stack,
abstractly. Practically, however, when people speak of "the
stack" (rather than "a stack"), they mean the machine stack.
Is taking the address of the 'this' pointer valid?
No. It's a value, not a variable or an object. (In C++ terms,
an rvalue, but for some reason, the C++ standard describes it in
C terms: a non-lvalue.) It has no address. (An rvalue only has
an address if it has class type. Dixit the standard---I've
worked on systems where doubles were actually in memory.)