Адреса указателей?
Потому что указатели - прежде всего такие же переменные, как и любые другие (это очень важно понимать). Второе выведенное значение - это значение переменной b, и не особо важно, указатель это или нет (в нашем случае - да, указатель, и поэтому выведенное значение переменной b - некоторый адрес). Третье выведенное значение - это АДРЕС переменной b, и не имеет значения, что за тип у переменной b. Вы можете объявить int b или float b, и получите аналогичный результат.
Вот что является отличительным моментом указателя - это как раз таки первое выведенное значение, а точнее, сама возможность его вывести. Для указателей (а также для любых пользовательских типов, реализующих operator*) доступна операция разыменования. Это дает возможность взять значение переменной b, интерпретировать его как адрес, а затем, в свою очередь, залезть в память по этому адресу и получить значение уже оттуда. В данном случае можно утверждать, что по адресу 0x011CD1C0 находится значение 66 (если его интепретировать соответственно типу указателя).
потому что первый адрес - это адрес ячейки памяти, по которому хранится значение 66
второй адрес - это адрес ячейки памяти, по которому хранится адрес другой ячейки памяти, по которому хранится значение 66