С++ для начинающих




Оператор вывода << - часть 2


Имеется также предопределенный оператор вывода для указательных типов, который печатает адрес объекта. По умолчанию адреса отображаются в шестнадцатеричном виде. Например, программа

#include <iostream>

int main()

{

    int i = 1024;

    int *pi = &i;

    cout << "i:   " << i

         << "\t&i:\t" << &i << '\n';

    cout << "*pi: "      << *pi

         << "\tpi:\t"    << pi  << endl

         << "\t\t&pi:\t" << &pi << endl;

}

выводит на терминал следующее:

i:   1024  &i: 0x7fff0b4

*pi: 1024  pi: 0x7fff0b4

          &pi: 0x7fff0b0

Позже мы покажем, как напечатать адреса в десятичном виде.

Следующая программа ведет себя странно. Мы хотим напечатать адрес, хранящийся в переменной pstr:

#include <iostream>

const char *str = "vermeer";

int main()

{

   const char *pstr = str;

   cout << "Адрес pstr равен: "

        << pstr << endl;

}

Но после компиляции и запуска программа неожиданно выдает такую строку:

Адрес pstr равен: vermeer

Проблема в том, что тип const char* интерпретируется как C-строка. Чтобы все же напечатать адрес, хранящийся в pstr, необходимо подавить обработку типа const char* по умолчанию. Для этого мы сначала убираем спецификатор const, а затем приводим pstr к типу void*:

<< static_cast<void*>(const_cast<char*>(pstr))

Теперь программа выводит ожидаемый результат:

Адрес pstr равен: 0x116e8

А вот еще одна загадка. Нужно напечатать большее из двух чисел:

#include <iostream>

inline void

max_out( int val1, int val2 )

{

   cout << ( val1 > val2 ) ? val1 : val2;

}

int main()

{

    int ix = 10, jx = 20;

    cout << "Большее из " << ix

         << ", " << jx << " равно ";

    max_out( ix, jx );




Содержание  Назад  Вперед