![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Как и объекты любых других типов, указатели могут быть собраны в массив. В следующем операторе объявлен массив из 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. Массивы указателей. 34
Содержание. 36
Дата публикования: 2015-01-23; Прочитано: 263 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!