|
|||
Индексирование. ИнициализацияИндексирование Предположим, было сделано объявление вида: Int i, a[размер]; Тогда для доступа к элементу массива можно написать: a[i]. В более общем случае эта запись выглядит так: a[выражение], где выражение – это целое выражение. Указанное выражение называют индексом (subscript или index) элемента массива а. В С++ значение индекса должно лежать в диапазоне от 0 до размер-1. Инициализация Массив может быть инициализирован с помощью заключённого в фигурные скобки списка выражений, разделённых запятыми: Int a[4] = {4, 5, 1}; // a[0] = 4, a[1] = 5, a[2] = 1 Когда список инициализаторов короче размера массива, остальные элементы инициализируются нулём. Неопределённые массивы автоматически инициализируются нулём, однако, открываются с неопределёнными значениями. Массиву, объявленному с явным списком инициализаторов, но без задающего его размер выражения, даётся размер, соответствующий количеству инициализаторов: Char la[] = {‘1‘, ‘r’, ‘g’}; Имя массива само по себе является адресом или значением указателя. Массивы и указатели почти идентичны в смысле их использования для доступа к памяти. Однако, существуют важные различия. Указатель – переменная, принимающая в качестве значения адрес. А имя массива является конкретным фиксированным адресом, который может пониматься как постоянный указатель. Когда объявляется массив, компилятор должен выделить базовый адрес и достаточный объём памяти для размещения всех элементов массива. Базовый адрес массива является начальным положением в памяти, где хранится массив; это адрес первого (с индексом 0) элемента массива. Рассмотрим следующее объявление: Const int n = 100; Int a[n], *p; Пусть система назначила байты памяти 300, 304, 308, … , 696 в качестве адресов для хранения a[0], a[1], a[2], … , a[99] соответственно; при этом адрес 300 стал базовым адресом массива а. Две инструкции p = a; и p = &a[0]; являются равнозначными и присваивают р значение 300. Арифметика указателей предлагает альтернативу индексированию массивов. Две инструкции: p = a + 1; и p = &a[1]; равнозначны и присваивают р значение 304. Предположив, что элементам а были присвоены значения, мы можем использовать следующий код для суммирования массива: sum = 0; for (p = a; p < &a[n]; ++p) sum += *p; это равносильно sum = 0; for (i = 0; i < n; ++i) sum += *(a + i); Также как выражение *(a + i) равносильно a[i], выражение *(p + i) равносильно p[i]. Поскольку массив а является постоянным указателем, а не переменной, такие выражения как: a = p ++a a += 2 недопустимы. Мы не можем изменить адрес а.
|
|||
|