Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
16.02.2016
Размер:
382.98 Кб
Скачать

Выделение памяти под массив

При создании массива память под все элементы этого массива выделяется последовательно для каждого элемента в зависимости от типа массива.

Для многомерных массивов память выделяется последовательно, изменяя в первую очередь значения самого правого индекса, и т. д.

Например, для массива char A[2][3] будет выделено шесть байт памяти и элементы будут размещены в следующем порядке:

Элемент

A[0][0]

A[0][1]

A[0][2]

A[1][0]

A[1][1]

A[1][2]

N байта

1

2

3

4

5

6

Двумерные массивы можно рассматривать как матрицу, где первый индекс определяет строку, а второй индекс - столбец. Порядок расположения элементов матрицы в памяти - по строкам.

При размещении трехмерного массива char A[3][4][5] память под элементы этого массива будет выделяться последовательно в соответствии со следующими значениями индексов:

Общий объем выделяемой под массив памяти вычисляется следующим образом: произведение всех размерностей массива (общее число элементов), умноженное на длину типа данных массива.

000

001

002

003

004

010

011

012

013

014

020

 

 

 

 

 

104

030

 

 

 

 

 

114

120

 

 

 

124

130

131

132

133

134

200

201

202

203

204

210

211

212

213

214

220

221

222

223

224

230

231

232

233

234

Доступ к элементам массива

Доступ к элементам массива выполняется по индексу элемента, указываемого в квадратных скобках. Первым элементом массива считается элемент с индексом 0.

Оператор & позволяет получить адрес любого элемента массива. Имя массива является адресом массива и эквивалентно следующему выражению: &имя_массива[0].

Пример:

ArrayOfIntl[0]=13;// Присваивание значения первому элементу массива

iIntl=ArrayOfIntl[l]=13; // Групповое присваивание

ilnt2=& ArrayOfintl[l]; // Получение адреса второго элемента массива

Очень важно при работе с массивами всегда помнить, что компилятор не проверяет выход значений индексов за границы массива.

Определение размера массива

Для определения размера массива в байтах следует использовать функцию sizeof(имя_массива).

Символьные массивы

Синтаксис языка ни имеет простого строкового типа. Для работы со строками используются массивы символов. Объявить массив символов - строку можно двумя способами:

  • указав посимвольно каждый элемент массива, включая и символ конца строки;

  • указав в двойных кавычках при инициализации массива значение строки (символ конца строки будет добавлен автоматически).

Символом конца строки служит null-символ \0 (0 - символ). При подсчете числа символов в строке учитывается общее число символов плюс символ конца строки.

Указатели

Указатель на переменную или объект некоторого типа содержит адрес памяти расположения переменной или объекта данного типа.

Объявление переменных, содержащих адреса других переменных, может иметь следующее формальное описание:

// Объявление и инициализация переменной указателя адреса

тип имя_переменной_содержания, имя_переменной_содержания1;

тип имя_переменной_адреса; // Указатель адреса

имя переменной_адреса= &имя_переменной_содержания;

// Объявление указателя с одновременной инициализацией

тип имя_переменной_адреса=&имя_переменной_содержания;

// Доступ к значению переменной по указателю

имя переменной_содержания1=*имя_переменной_адреса;

При работе с указателями действуют следующие правила:

  • для объявления переменной-указателя перед именем переменной, после определения типа, указывается;

  • после объявления указателя его следует инициализировать адресом значения соответствующего типа;

  • тип указателя должен совпадать с типом данных, для которых он будет использоваться;

  • для получения адреса переменной перед ее именем следует указать операцию & (взятие адреса);

  • для получения значения переменной по указателю на нее (по ее адресу) следует перед указателем вставить операцию * (взятие значения);

  • указатель строки содержит адрес первого символа строки (он аналогичен имени символьного массива) и может быть использован во всех операциях со строками;

  • при инкрементировании указателя на единицу значение, содержащееся в переменной-указателе, увеличивается на число байт в соответствии с типом указателя.

Отметим, что операцию & нельзя использовать для регистровых переменных (register regl; pReg=&regl;), с константами (pAdr=&444;) и с арифметическими выражениями (int i=342; pAdr=&(i+l)).

Соседние файлы в папке VC++Баженова