Оператор basic_ostream
<<
специализирован для const char*
аргументов *, чтобы выводить его как строку C **.См. ответ на Почему cout печатает массивы символов иначе, чем другие массивы? для получения более подробной информации.
В принципе, вы можете привести p
к void*
, когдапечать для получения адреса.
cout << static_cast<void*>(p);
*: также const charT*
, где charT
- тип символов, принятый basic_ostream
, const unsigned char*
и const signed char*
если charT == char
.Например, wcout
будет обрабатывать const wchar_t*
как (широкую) строку C, но cout
будет обрабатывать ее как указатель.
**: это может быть переопределеночерты характера, используемые этим basic_ostream
.См. Подробный алгоритм в стандарте C ++ § [ostream.inserters.character] / 4.