Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка 25.07.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.05 Mб
Скачать

Имя_массива[индекс]

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

Используя операцию обращения по адресу * (операция разыменования), действие бинарной операции можно представить следующим образом:

*(имя_массива + индекс)

т.е. операндами для операции [] служат имя_массива и индекс. Из этого становится очевидным, почему индекс первого элемента массива равен нулю. Таким образом, запись *имя_массива – обращение к первому элементу массива, *(имя_массива+1) – обращение ко второму, и т.д.

Поскольку сложение *(имя_массива+индекс) коммутативно, то возможна такая эквивалентная запись *(индекс+имя_массива) и, следовательно, индекс [имя_массива] именует тот же элемент массива, что имя_массива [индекс].

В некоторых конструкциях можно использовать выражение имя_массива [индекс] с отрицательным значением индекса. В этом случае имя_массива должен указывать не на начало массива, т.е. не на его нулевой элемент.

Ссылки

Ссылки – это специальный тип указателя, который позволяет работать с указателем как с объектом. Объявление ссылки делается с помощью операции ссылки, обозначаемой амперсантом (&) – тем же символом, который используется для адресации. Например, если имеется объявление

double*P = new double;

то можно создать ссылку на этот объект оператором:

double& Ref = *P;

Объявленная таким образом переменная Ref является ссылкой на объект вещественного типа. Она может рассматриваться как псевдоним объекта. Эта переменная является именно указателем, а не самим объектом. Но работа с ней производится как с объектом, в отличие от указателя.

*P=*P+0.5;

Ref=Ref+0.5;

Чаще всего ссылки используются при передаче в функции параметров по ссылке.

Одномерные динамические массивы

В соответствии с синтаксисом операция new может иметь следующий формат:

имя_указателя=new тип_массива [размерность];

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

При выделении динамической памяти размер массива должен быть определен явно, т.к. операция new получает информацию о выделяемом участке из размерности и типе_массива. Оператор

double *A=new double [30];

создает динамический массив из 30 элементов вещественного типа.

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

float *e;

int N;

cout << “N=”;

cin >>N;

e=new float [N];

Доступ к значениям элементов динамического массива может быть осуществлен таким же образом, как и при работе со статическими массивами. Продолжая пример выше, можно записать

for(int i=0; i<N; i++)

e[i]=double(random(41)-20)/10;

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

Освободить память, выделенную под динамический массив можно используя операцию delete, которая в этом случае имеет следующий синтаксис