На этом шаге мы рассмотрим особенности ввода и вывода значений типа void*.
Операторы >> и << также позволяют вывести указатель и снова прочитать его. Если оператору вывода передается параметр типа void*, то оператор выводит адрес в формате, зависящем от реализации. Например, следующая команда выводит содержимое С-строки и ее адрес:
char* cstring = "hello"; std::cout << "string \"" << cstring << "\" is located at address: " << static_cast<void*>(cstring) << std::endl;
Результат выполнения этой команды выглядит так:
string "hello" is located at address: 0x10000018
Этот адрес можно прочитать оператором ввода. Тем не менее следует учитывать, что в общем случае адрес является временной величиной. При новом запуске программы объекту может быть присвоен совершенно иной адрес. В частности, ввод-вывод адресов может применяться в программах, обменивающихся адресами для идентификации объектов или использующих общую память.
На следующем шаге мы рассмотрим потоковые буферы.