Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Ii) Указатели на элементы массива

Правила приведения типов операндов | Объединения (union). | Как это работает | Проверка – Передача по значению |


Читайте также:
  1. A) расходуемые элементы
  2. Б) элементы системы вне зависимости от ее класса образуют устойчивые достаточно сильные взаимосвязи
  3. Валютная система и ее элементы. Валютная система РБ.
  4. Витамины и микроэлементы
  5. ВНЕЦЕНТРЕННО РАСТЯНУТЫЕ ЭЛЕМЕНТЫ
  6. Внутренняя среда маркетинга: составляющие элементы.

 

Указатели могут указывать на элементы массива. К указателям на элементы массива применимы арифметические операции для получения указателей на другие элементы массива. Например, если p указывает на x[5] из массива x, то p + 3 есть значение указателя на x[8 ], а p – 4 есть значение указателя на (т. е. адрес) элемент x[1]. Мы можем использовать операции ++ или – для продвижения указателя к следующему или предыдущему элементу массива. Тип элементов явно не специфицируется при использовании указателей в выражениях. Выражение p + 3 в действительности есть адрес, получаемый как

 

(the value of p) + 3 * sizeof (element of x).

 

Разность двух указателей также может быть вычислена: если p указывает на x[4] и q указывает на x[8], то q - p = 4, а p - q = - 4. Более того, p > q и p == q есть false, а p!= q и q > p - true. Программист ответственнен за арифметические действия над указателями: выход за пределы массива обычно приводит к плохим последствиям.

 

Указатели на элементы массива могут быть использованы в нотации массивов: если p указывает на x[5], то выражение p[3] есть то же самое, что и *(p + 3), т.е.., x[8].

 

С другой стороны, имя массива может использоваться в качестве указателя на первый элемент массива. Поэтому, если x – массив из 10 целых, то *(x + 5) есть то же самое, что и x[5]. Если p – указатель на int, мы можем написать p = x + 5. Но, так как имя массива не является модифицируемым l-value, выражения x++ и x = p не допустимы.

 

(iii) Динамические массивы (ранее мы уже коротко это обсуждали…)

Указатели можно использовать для создания динамических массивов (dynamic arrays). Олерация new выделяет память под массив во время выполнения программы.

 

int * p;

p = new int[10];

// выделяет память под массив из 10 элементов целого типа,

// p указывает на первый элемент массива.

 

Элементы массива в этом случае доступны как в нотации для указателей, *(p + 3), например, так и нотации для массивов (по индексу) - p[3].

 

Так как память для динамических массивов выделяется в куче (heap), то она должна быть вовремя освобождена операцией delete. Используйте cинтаксис

 

delete [ ] p;

 

для освобождения памяти, ранее выделенной по указтелю p. Размер массива не указывается.

 

Следующий фрагмент кода создает трехмерный динамический массив:

 

int *** p = new int**[5];

// p is a pointer to an array of 5 pointers to pointer to int.

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

{

p[i] = new int*[4];

// p[i] is a pointer to an array of 4 pointers to int.

for (int j = 0; j < 4; ++j)

{ p[i][j] = new int[3]; }

// p[i][j] is a pointer to an array of 3 int.

}

Здесь p “головной” (управляющий) указатель трехмерного массива p[5][4][3]. Позже мы должны уничтожить массив, действуя в обратном порядке:

 

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

{

for (int j = 0; j < 4; ++j)

{ delete [ ] p[i][j]; }

delete [ ] p[i];

}

delete [ ] p;


Дата добавления: 2015-11-16; просмотров: 131 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Явное приведение типа| V) Массивы и функции

mybiblioteka.su - 2015-2024 год. (0.006 сек.)