Указатели в C++. Общие понятия
Указатели обеспечивают хранения адресов областей памяти. При обработке компилятором переменной, например, int i=20, выделяется память в соответствии с типом (int) и инициализируется значением (20). При этом все обращения к переменной компилятор заменяет адресом области памяти, в которой хранится значение переменной. Адреса получаются автоматически. Программист сам может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями.
В C++ три вида указателей: указатели на объект, на функцию и указатель на void. Отличие этих указателей в свойствах и в допустимых операциях.
Указатель - не самостоятельный тип, а связан с другим конкретным типом.
Указатель на функцию - адрес в сегменте кода по которому передается управление вызова функции.
Используется для косвенного вызова функции (не через имя, а через переменную, хранящую ее адрес), и для передачи имени функции в другую функцию в качестве параметра.
Указатель функции имеет тип "указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа":
Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного).
Простейшее объявление имеет вид:
Важно. Звездочка относится к имени, требуется ставить ее перед именем каждого из них.
Пример.
Указатель на void применяют когда конкретный тип объекта, адрес которого надо хранить, не определен (в одной и той же переменной в разные моменты времени надо хранить адреса объектов различных типов).
Указателю на void можно присвоить значение указателя любого типа, а также cравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явно.
Указатель может быть константой или переменной, а также указывать на константу или переменную.
Примеры.
В C++ три вида указателей: указатели на объект, на функцию и указатель на void. Отличие этих указателей в свойствах и в допустимых операциях.
Указатель - не самостоятельный тип, а связан с другим конкретным типом.
Указатель на функцию - адрес в сегменте кода по которому передается управление вызова функции.
Используется для косвенного вызова функции (не через имя, а через переменную, хранящую ее адрес), и для передачи имени функции в другую функцию в качестве параметра.
Указатель функции имеет тип "указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа":
тип (*имя) (список_типов_аргументов);Пример:
int (*fun) (double, double);задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.
Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного).
Простейшее объявление имеет вид:
тип *имя:где тип может любо, кроме ссылки и битового поля, причем тип может быть к этому моменту только объявлен, но еще не определен (следовательно, в структуре, например, может присутствовать указатель на структуру того же типа).
Важно. Звездочка относится к имени, требуется ставить ее перед именем каждого из них.
Пример.
int *a, b, *с;Замечание. Можно определить указатель на указатель и т. д.
Указатель на void применяют когда конкретный тип объекта, адрес которого надо хранить, не определен (в одной и той же переменной в разные моменты времени надо хранить адреса объектов различных типов).
Указателю на void можно присвоить значение указателя любого типа, а также cравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явно.
Указатель может быть константой или переменной, а также указывать на константу или переменную.
Примеры.
int 1; //целая переменная const int ci=1; //целая константа int *pi; //указатель на целую переменную const int *pci; //указатель на целую константу int *const ср=&i; //указатель-константа на целую переменную const int *const срс=&ci; //указатель-константа на целую константу