Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава3_Массивы и указатели в С++.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
331.26 Кб
Скачать

10.8. Массивы указателей

Как и объекты любых других типов, указатели могут быть собраны в массив. В следующем операторе объявлен массив из 10 указателей на объекты типа int:

int *x[10];

Для присвоения, например, адреса переменной var третьему элементу массива указателей, необходимо написать:

x[2] = &var;

В результате этой операции, следующее выражение принимает то же значение, что и var:

*x[2]

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

По определению массива, его элементы должны быть однотипные и одинаковые по длине. Пусть необходимо определить массив для представления списка фамилий. Если определять его как двумерный массив типа char, то в определении элементов массива необходимо задать предельные размеры каждого из двух индексов, например:

char spisok[25][20];

Таким образом, количество фамилий в списке не более 25 и длина каждой фамилии не превышает 19 символов (букв). При определении массива одну из его предельных размерностей (значение самого левого индекса) можно не указывать. В этом случае количество элементов массива определяется, например, инициализацией (рис. 8):

char spisok[][20] = {"ИВАНОВ", "ПЕТРОВ", "СИДОРОВ"};

Рис. 8. Схема размещения в памяти элементов массива spisok

Теперь в массиве spisok только 3 элемента, каждый из них длиной 20 элементов типа char. В противоположность этому при определении и инициализации этими же символьными строками одномерного массива указателей типа char * память распределяется гораздо рациональнее (рис. 9):

char *pointer[] = {"ИВАНОВ", "ПЕТРОВ", "СИДОРОВ"};

Рис. 9. Схема размещения в памяти элементов с помощью массива указателей

Для указателей массива pointer, в котором 3 элемента и каждый является указателем-переменной типа char *, выделяется всего 3*sizeof(char *) байтов. Кроме того, компилятор размещает в памяти три строковые константы "ИВАНОВ" (7 байт), "ПЕТРОВ" (7 байт), "СИДОРОВ" (8 байт), а их адреса становятся значениями элементов pointer[0], pointer[l], pointer[2] (рис. 9).

Содержание

Глава III. Массивы и указатели 1

9. Массивы 1

9.1. Общие принципы организации массивов 1

9.2. Объявление и инициализация массивов 1

9.3. Заполнение массива данными и вывод элементов массива 3

9.4. Типовые задачи на обработку одномерных массивов 5

9.5. Типовые задачи на обработку двумерных массивов 14

10. Указатели 19

10.1. Назначение указателей 19

10.2. Объявление и инициализация указателей 19

10.3. Операции над указателями 21

10.4. Выражения и арифметические действия с указателями 22

10.5. Связь указателей с массивами 24

10.6. Операторы new и delete. Константа NULL 27

10.7. Динамические массивы 30

10.8. Массивы указателей 33

Содержание 36

35