Хелпикс

Главная

Контакты

Случайная статья





Индексирование. Инициализация



Индексирование

Предположим, было сделано объявление вида:

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

недопустимы. Мы не можем изменить адрес а.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.