Scrivere
cout << pippo;
è un modo più semplice di effettuare la seguente chiamata a funzione
operator <<(cout, pippo);
La suddetta è una funzione con overload, ossia esistono varie versioni della stessa funzione in base al tipo del secondo argomento.
Nel caso in cui il secondo argomento è un puntatore a char, viene richiamata la versione della suddetta funzione che interpreta il contenuto di quel puntatore come l'indirizzo di memoria del primo carattere di una stringa C-style, ossia di un array di char terminato dal carattere \0.
Detta in maniera più semplice, se utilizzi un puntatore a char, cout lo interpreterà come una stringa e non come un semplice puntatore.
Se invece vuoi stampare l'indirizzo di memoria devi fare in modo che quello passato non sia un puntatore a char, e quindi una strada può essere quella di convertire il puntatore a carattere in un puntatore a void attraverso l'operatore di casting. Per esempio, utilizzando una forma meno pedante e rigorosa di quella da te riportata, si può scrivere
cout << (void*)pippo;
Oppure puoi sempre utilizzare la funzione printf().