C++ указатели. Константный указатель
На этом уроке мы рассмотрим c++ указатели. Рассмотрим базовую теорию указателей и адресной арифметики.
Указатели обеспечивают высокую скорость и гибкость программы. Например, массивы всегда передаются в функцию с помощью указателя. Таким образом мы передаем через стек программы всего 4 байта, экономя ресурсы. Указатели часто используются для работы с динамической памятью. Мы динамически выделяем память и записываем в указатель адрес созданного массива.
Динамические массивы мы рассмотрим позже. C++ указатели — мощный и в тоже время сложный инструмент, который часто вызывает у новичков вопросы. Также надо четко понимать отличие указателей от ссылок. Поэтому первый и второй урок посвящен рассмотрению c++ указателей и ссылок.
В чем их отличие и какие операции можно с ними проводить. На третьем уроке рассматривается передача в функцию по значению, ссылке и с помощью указателей. Указатель — это тоже переменная, которая также имеет адрес. Мы можем создать указатель на указатель и присвоить ему адрес указателя.
Что касается гибкости указателей, то здесь можно привести несколько типичных примеров. Например, двухсвязный список. Когда часто приходится добавлять и удалять элементы из массива, то лучше воспользоваться списком.
Каждый элемент двухсвязного списка хранит адрес предыдущего и последующего элемента. Удаляя элемент, мы просто меняем значения указателей. Еще один пример использования c++ указателей — бинарное дерево. В этом случае узел дерева имеет одного родителя и двух потомков.
Тем самым обеспечивается очень высокая скорость поиска. Также можно создать указатель на константу, константный указатель и константный указатель на константу. К примеру у нас есть указатель на строковый литерал: char *str = «some text».
Если мы изменим один из символов массива, например str[2] = ‘z’, мы получим ошибку на этапе выполнения программы. Поэтому, чтобы избежать ошибки, можно создать указатель на константу: const char *str = «some text». Но указатель str может изменяться, например, можем присвоить новую строку: str = «hello». Но, если нам надо обеспечить неизменность строки, то нужно сделать константным и сам указатель: const char *const str = «some text». Это так называемый константный указатель на константу.
С уважением, Александр Солдаткин.
Понравилась статья? Жми: | Поделиться в соц. сетях |