Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




Структурированный тип данных

Это данные, определяющие упорядоченную совокупность скалярных переменных (char, int, float, double, …) и характеризуемые типом своих компонент.

К ним относят: массивы, структуры, объединения, указатели, динамические структуры (стеки, очереди, списки), классы.

Остановимся на массивах.

Массивы

Массив — это составной, структурированный тип данных одного заранее определенного типа, который имеет следующие характеристики:

* элементы массива имеют одинаковый тип (в отличие от структур), поэтому каждый элемент массива занимает одинаковый объём памяти;

* массив располагается в оперативной памяти (в отличие от файлов);

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

По своей структуре массивы данных могут быть одномерными (векторами размера 1*n или n*1), двухмерными (матрицами размера n*m) или многомерными (размера n*m*p...).

С точки зрения времени распределения памяти под массив они делятся на статические и динамические.

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

Для имени массива может быть использована переменная, состоящая из символов (буквы) латинского алфавита с цифрами и знаком подчеркивания и т.д. в соответствии с правилами написания имен идентификаторов, принятых в языке С/С++.

Доступ к элементам массива в языке С/С++ осуществляется двумя способами.

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

Замечание. В качестве индекса нельзя использовать выражение вещественного типа.

2) С помощью указателя (адреса) на первый элемент массива, т. к. в С/С++ существует связь между массивами и указателями.

 

 

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

 

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

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

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

Здесь <тип>— тип элементов массива (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];

}

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





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 360 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2557 - | 2402 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.