Динамический массив указателей

Указатель на указатель

При работе с динамическим массивом указателей и, как частный случай, с динамическими матрицами, в объявлении будут использоваться два подряд идущих символа “*”, что означает указатель на указатель. Поэтому параграф начнём с рассмотрения этого понятия.

Как мы знаем, обычный указатель содержит адрес некоторого участка памяти, в котором находится некоторое значение. В случае указателя на указатель, первый из них содержит адрес ячейки, в которой находится не обрабатываемая информация, а в свою очередь адрес другого участка памяти, содержащего некоторое значение. В некоторых книгах это называют многочисленным перенаправлением или цепочкой указателей.

Переменная, являющаяся указателем на указатель, описывается с использованием двух символов “*” перед именем. Например, объявление

float **p2;

означает, что p2 — это не указатель на число с плавающей точкой, а в p2 будет храниться адрес ячейки, в которой будет находиться адрес другой ячейки с вещественным числом. Такую переменную можно кратко назвать как указатель на указаетль на вещественное число.

Для получения доступа к такой информации, то есть у нас к вещественному числу, необходимо дважды применить операцию “*”. Например, рассмотрим следующий фрагмент:

float x, *p1, **p2;

x=2.2; p1=&x; p2=&p1;

printf (“%5.1f %5.1f%5.1f”, x,*p1,**p2);

В результате будет трижды выведено число 2.2, доступ к которому осуществляется с помощью простой переменной x, операции разыменования для указателя на вещественное число p1 и дважды используемой операции разыменования для указателя на указатель p2.

Мы уже знаем, что cout<<p1; выведет адрес ячейки памяти, в которой находится вещественное число x=2.2. Аналогично в p2 хранится адрес ячейки p1, в которой адрес вещественного числа. А что получится в результате выполнения cout<<(*p2);? Будет выведено содержимое ячейки памяти, адрес которой в p2, то есть значение p1.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: