Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Многомерные массивы

Инициализация

Массив может быть инициализирован с помощью заключённого в фигурные скобки списка выражений, разделённых запятыми:

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

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

Массивы объявленные с двумя парами квадратных скобок – двумерные. Продолжая в том же духе, можно получить массивы более высокой размерности. С каждой новой парой квадратных скобок наращивается размерность массива.

Пример:

Int a [100];

Int b [3] [5];

Int c [6] [3] [5];

Любой k-мерный массив имеет размер по каждому из своих k-измерений. Пусть si представляет величину i-того измерения, тогда объявление массива выделит память для s1 ´ s2 ´ … ´ sk элементов. В приведённом примере b содержит 3 ´ 5 элементов, а с – 6 ´ 3 ´ 5 элементов. Начиная с базового адреса массива все элементы хранятся в памяти последовательно. Многомерный массив может быть инициализирован заключённым в фигурные скобки списком инициализаторов, причём каждый ряд инициализируется своим списком в фигурных скобках:

Int a [2] [3] = { {1, 2, 3}, {4, 5, 6} }; // то же, что {1, 2, 3, 4, 5, 6}

<== предыдущая лекция | следующая лекция ==>
Индексирование | Card c1, c2
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 316; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.