Pointers are also data
All variables declared locally represents an object that is stored on the stack. The difference between dynamic allocation and automatic objects is that automatic objects store their data directly on the stack, while dynamically allocated objects store a pointer on the stack that points to data on the heap.
When you output a pointer to standard output using the << operator, then what happens is that the objects contents, which is an address to A, is printed out.
When you apply the built-in address-of operator * to an object, then it creates and returns a pointer on the stack that points to the given object. When outputting the returned pointer, in your second case, using <<, then its contents are printed, which is the address to the first pointer.
Think of your memory as a bookshelf. Then a pointer is one of those fake hollow books that you can put something else inside, like a little note with an address to another book (or another fake hollow book). The fake hollow book also has an address, just like the rest of the books, as e.g. third from left, second shelf etc. In this model using the address-of operator on a book creates a new fake hollow book containg a note with an address to the specified book. The heap can be seen as another bookshelf on the other side of the room whose books can be addressed inside fake books in the first bookshelf.