Рассмотрим одномерные массивы

Массив называется одномерными, если элементы массива располагаются строго последовательно. При этом элемент массива имеет один индекс (одну размерность), определяющий порядковый номер элемента в массиве.

Формат описания одномерного массива:

<тип> <имя_массива> [размер];

Здесь <тип>— тип элементов массива (int, float, char, структуры), <имя_массива>записывается по правилам идентификаторов; <размер> - размерность массива, количество его элементов в виде целочисленной константы или константного выражения. Эта величина определяет количество ячеек оперативной памяти, зарезервированной для массива.

Например:

а) float A[10];

б) const n=10; float A[n];

Здесь преимущество второго способа, с предварительным объявлением размерности в виде константы, заключается в следующем - если надо будет изменить размерность массива, то это достаточно сделать в одном месте программы при определении константы.

Для статического массива, на этапе компиляции, резервируется память для размещения n чисел указанного типа (10 вещественных чисел), при этом для него требуется память объёмом k*n байт (4*10), где k — необходимое количество байт для размещения одного элемента указанного типа (одного числа типа float). Эта память сохраняется на всё время выполнения программы, а точнее, функции или блока, где описан массив.

Программно необходимый объём памяти определяется с помощью операции sizeof, например:

M=sizeof (<тип>) * n;

или M= sizeof (<имя_масива>);

или M= sizeof <имя_масива>;

где M — переменная целого типа, определяющая размер массива в байтах. Тип обязательно записывается в скобках, а имя может быть без скобок.

Следующая программа выведет дважды число 40.

float A[10]; int M1, M2;

M1=sizeof(float)*10; // но M1=sizeof float *10;— ошибка!

M2=sizeof(A); // или M2=sizeof A;

cout<<M1<<endl<<M2;

При работе с массивом необходимо помнить, что нумерация элементов массива начинается с 0. Тогда A[n-1] — последний элемент массива. Это связано с использованием указателей при работе с массивами. Поэтому в нашем примере индекс элементов массива может изменяется от 0 до 9 включительно, то есть индекс последнего элемента массива на единицу меньше его размерности. Объявленные 10 элементов массива обозначаются следующим образом: A[0], A[1], A[2],…, A[9].

Замечание. В языке С/С++ отсутствует проверка границ массивов, поэтому возможна ситуация выхода за его границы. Выходя за границы массивы можно записать значение в некоторую переменную или даже в код программы, что может привести к неожиданным результатам. О таком контроле должен позаботиться программист.

При использовании статических массивов возникают ситуации, когда размер массива заранее не известен. В этом случае описывается массив с максимальной размерностью. Реальную размерность вводим и используем далее, например, в циклах и для других целей:

const nmax=100;

float X[nmax];

int n;

cout<<”Введите размер массива ”;

cin>>n;

// Д альше работаем с n (а не с nmax) элементами массива, например, вводим их

for (int i=0; i<n; i++)

{

cout<<”X[“<<i<<”]=”;

cin>>X[i];

}

Замечание. Такой способ проще, но неэффективен с точки зрения распределения памяти, так как “заказываем” больше памяти, чем реально используем. В таких случаях профессионально используются динамические массивы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: