Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций(ОАиП).doc
Скачиваний:
70
Добавлен:
11.05.2015
Размер:
1.07 Mб
Скачать

12.2. Одномерные массивы

Индексы у одномерных массивов в языке Си начинаются с 0, а в программе одномерный массив объявляется следующим образом:

<тип> < ID_массива>[размер]={список начальных значений};

где: тип – базовый тип элементов (целый, вещественный, символьный);

размер – количество элементов массива.

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

Размер массива может задаваться константой или константным выражением. Нельзя задавать массив переменного размера. Для этого существует отдельный механизм – динамическое выделение памяти.

Пример объявления массива целого типа: int a[5];

В массиве «а» первый элемент: а[0], второй – а[1], … пятый - а[4].

Обращение к элементу массива в программе на языке Си осуществляется в традиционном для многих других языков стиле - записи операции обращения по индексу, например:

a[0]=1;

a[i]++;

a[3]=a[i]+a[i+1];

Пример объявления массива целого типа с инициализацией значений:

int a[5]={2, 4, 6, 8, 10};

Если в группе {…} список значений короче, то оставшимся элементам присваивается 0.

Внимание. В языке С с целью повышения быстро­дей­ствия программы отсутствует механизм контроля границ изменения индексов массивов. При необходимости такой механизм должен быть запрограммирован явно.

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

Как уже отмечалось, в языке Си кроме одномерных массивов возможна работа с многомерными массивами. Объявление многомерного массива:

<тип> < ID >[размер1][размер2]…[размерN]={{список начальных значений},

{список начальных значений},…};

Наиболее быстро изменяется последний индекс элементов массива, поскольку многомерные массивы в языке Си размещаются в памяти компьютера в последовательности столбцов.

Например, элементы двухмерного массива b[3][2] размещаются в памяти компьютера в следующем порядке:

b[0][0], b[0][1], b[1][0], b[1][1], b[2][0], b[2][1].

Следующий пример иллюстрирует определение массива целого типа, состоящего из трех строк и четырех столбцов, с одновременным присвоением его элементам (инициализацией) начальных значений:

int a[3][4] = {{1,2,0,0},{9,-2,4,1},{-7,0,0,0}};

Если в какой-то группе { } список значений короче, то оставшимся элементам присваивается 0.

12.4. Операция sizeof

Данная операция позволяет определить размер объекта по ID или типу, результатом является размер памяти в байтах (тип результата int). Формат записи:

sizeof(параметр);

где: «параметр» – тип или идентификатор объекта (не IDфункции).

Если указан идентификатор сложного объекта (массив, структура, объединение), то получаем размер всего сложного объекта. Например:

sizeof(int)  размер памяти – 2 байта,

int b[5];

sizeof(b)  размер памяти – 10 байт.

Одно из полезных применений операции sizeof – определение реального количества элементов массива с объявленной размерностью:

char s[256];

int kol = sizeof(s)/sizeof(*s); // количество элементов массива s

Наиболее часто операция sizeof применяется при динамическом распре­де­ле­нии памяти:

float *x; // Указатель массива

int n; // Количество элементов массива

x=calloc(n,sizeof(*x)); // Захват и очистка памяти