Глава 7, Указатели и ссылки__________________________________155
носгь самим задавать их конкретный смысл во всех контекстах (перегрузка операций рассматривается в главе 16). Так как контекстные значения операций могут определяться пользователями, а указатели и ссылки являются неотъемлемой частью C++, необходимо понимать основы указателей и ссылок.
Вы могли встречать утверждение, что C++ — это как С, только лучше. Это означает, что пока вы только учитесь, вы можете писать на C++ совсем как на С, а применение более прогрессивных средств этого языка, типа перегрузки операций, можно без пагубных последствий отложить на потом. Новые идиомы не свалятся на вас неизвестно откуда; напротив, вы должны честно и сознательно сделать свой выбор: будете вы их использовать или нет. Если вы оставите использование более выразительных, прогрессивных средств C++ до лучших времен, то не надо думать, что язык вас не примет.
Понятие об операции разыменования
»
Операция разыменования обозначается символом звездочка (*). Под словом объект мы будем понимать общий термин для обозначения экземпляра переменной или экземпляра класса. Используя операцию разыменования в определении переменной, вы создаете указатель на конкретный экземпляр этого типа данных.
Попробуйте мысленным взором образно представить себе понятие указателя. Это сделает яснее смысл кода, использующего указатели, как, например, следующее определение переменной — указателя на целое число:
char *p;
Указатель — это не сам объект, указатель содержит 32-разрядное число, равное адресу блока данных, на который он указывает (если, конечно, указатель не нулевой). Сам указатель занимает ровно столько места, сколько требуется для хранения адреса объекта (рис. 7.1).
Рис. 7.1. Визуальное представление указателя и адресуемого объекта при ненулевом значении указателя