c1 is not necessarily sitting on the stack. It's a value, and that value will sit wherever that variable is stored. It might be on the stack, it might not, there are lots of factors that influence where a given variable is stored.
As far as what the type of the variable is, the type of the variable
Class1. That the value of that variable is a reference to an object that is elsewhere, rather than the data comprising a
Class1 instance is what it means to have a variable of type
Class1. By definition a storage location that contains a reference to an instance of type
Class1 that is elsewhere is what it means to have a variable of type
Class1, and that's exactly what