I think it's also useful to see what the C++ ISO spec explicitly says about this. According to the C++03 ISO spec, §9.3.2/1:
In the body of a nonstatic (9.3) member function, the keyword
this
is a non-lvalue expression whose value is the address of the object for which the function is called.
It's important to note that this
is not a variable - it's an expression, much in the same way that the expression 1 + 2 * 3
is an expression. The value of this expression is permitted to be stored pretty much anywhere. The compiler might put it on the stack and pass it as an implicit parameter to a function, or it might put it in a register, and it conceivably could put it in the heap or in the data segment. The C++ specification deliberately gives the implementation some flexibility here.
I think that the "language-lawyer" answer is "this is completely implementation-defined, and moreover this
is technically not a pointer, but an expression that evaluates to a pointer."