Массивы. Часть 1. Определение массива. Одномерные массивы. Инициализация массива
Содержание
- 1. Что такое массив? Определение массива
- 2. Определение одномерных и многомерных массивов
- 3. Описание одномерного массива. Примеры описания одномерных массивов
- 4. Доступ к элементам одномерного массива. Примеры
- 5. Как определить размер одномерного массива?
- 6. Особенности обработки массивов компилятором в C++. Границы массива
- 7. Как осуществляется инициализация массива в C++. Примеры
- 8. Инициализация символьных массивов. Пример
- 9. Присвоение одного массива другому. Пример
- 10. Описание массива структур. Пример
- Связанные темы
Поиск на других ресурсах:
1. Что такое массив? Определение массива
Массив – набор переменных одинакового типа. Доступ к этим переменным осуществляется по одному имени. Это имя называется именем массива.
Массивы используются для группирования связанных переменных между собой.
2. Определение одномерных и многомерных массивов.
Массивы могут быть одномерными и многомерными. В одномерных массивах для доступа к элементу массива используется один индекс. В многомерных массивах для доступа к элементу массива используется несколько индексов.
3. Описание одномерного массива. Примеры описания одномерных массивов
Общая форма описания одномерного массива:
тип имя_массива[размер];
В вышеприведенном описании:
- тип – это тип элементов массива. Он еще называется базовым типом. Базовый тип определяет количество данных каждого элемента, который составляет массив. Тип элементов массива может быть как базовым типом так и составным (например, структура). Подробно о базовых типах данных C++ описывается здесь.
- размер – количество элементов в массиве;
- имя_массива – непосредственно имя массива, по которому осуществляется доступ к элементам массива.
После описания массива, значение элементов может быть нулевым или неопределенным.
Пример 1. Описание массива из 10 целых чисел (тип int) с именем A.
int A[10];
В результате, в памяти компьютера выделяется 10 ячеек типа int. Если одна ячейка занимает 2 байта, то всего будет выделено 20 байт памяти. Номер первой ячейки начинается с нуля. Эти ячейки объединены общим именем A.
Рисунок 1. Массив из 10 целых чисел
Пример 2. Описание массива с именем M, содержащим 20 элементов типа char.
char M[20];
4. Доступ к элементам одномерного массива. Примеры
Доступ к отдельному элементу массива осуществляется с помощью индекса. Индекс определяет позицию элемента в массиве. Первый элемент массива имеет нулевой индекс.
Чтобы получить доступ к отдельному элементу массива по его индексу, нужно после имени массива в квадратных скобках указать номер этого элемента.
Пример 1. Пусть дан массив с именем A, содержащий 10 целых чисел. Записать число 5 в первый и последний элементы массива.
// описание массива A int A[10]; A[0] = 5; // первый элемент массива A[9] = 5; // последний элемент массива
На рисунке 2 видно результат работы вышеприведенного программного кода.
Рисунок 2. Результат работы фрагмента кода
Пример 2. Массив из 10 элементов типа char.
char M[10]; M[3] = 'a'; M[7] = '0'; M[8] = ';';
Рисунок 3. Массив из 10 элементов типа char
Пример 3. Массив из 30 вещественных чисел.
double M[30]; // массив из 30 вещественных чисел // обнуление массива M for (int i=0; i<30; i++) M[i] = 0.0;
5. Как определить размер одномерного массива?
Размер одномерного массива определяется по формуле:
размер массива = размер типа в байтах × количество элементов
Пример.
Если в массиве 20 элементов типа double (8 байт), то размер массива будет
размер = 20 × 8 = 160 байт
6. Особенности обработки массивов компилятором в C++. Границы массива
В C++ не ведется строгого контроля за доступом к элементам за пределами массива. Если описать массив из 100 элементов, то можно прочитать или изменить 101-й, 102-й и следующие элементы. На этих позициях могут быть ячейки памяти, которые были выделены для других переменных или даже для вашей программы. Это может привести к уничтожению программы при отсутствии каких-нибудь замечаний со стороны компилятора C++.
Вся ответственность за соблюдение границ массивов лежит строго на программисте. Программист должен писать такой код, который гарантирует корректную работу с массивами. Это реализуется с помощью включения в программу специальных проверок.
7. Как осуществляется инициализация массива в C++. Примеры
В C++ поддерживается два вида инициализации массивов:
- инициализация с заданием размера массива;
- «безразмерная» инициализация.
Общий вид инициализации с заданием размера массива:
тип имя_массива[размер] = { список_значений };
где
- тип – тип элементов массива;
- размер – количество элементов массива указанного типа;
- список_значений – список значений инициализации элементов массива. Элементы массива разделяются символом ‘ , ‘ (запятая).
Общий вид «безразмерной» инициализации:
тип имя_массива[] = { список_значений };
В этом случае размер массива определяется количеством элементов, которые описаны в список_значений.
Пример 1. Массив B инициализирован с заданием размера.
// инициализация массива B int B[10] = { 5, 6, 9, -8, 3, 2, 4, -90, -103, 0 };
Пример 2. Массив C инициализирован на основе списка значений («безразмерная» инициализация).
// инициализация массива C без задания размера float C[] = { -3.9, 2.8, -1.6, 2.2 };
8. Инициализация символьных массивов. Пример
Для символьных массивов можно использовать сокращенный вариант инициализации:
char имя_массива[размер] = "строка";
В этом случае каждому элементу массива присваивается один символ строки. Значение размер задает размер памяти, который выделяется для массива. Значение размер должно быть не менее длины строки, в противном случае компилятор выдаст сообщение об ошибке.
Допускается также вариант инициализации массива без указания размера
char имя_массива[] = "строка";
В этом случае размер массива равен длине строки.
Пример. Инициализация символьного массива с именем str.
// символьный массив - сокращенный вариант инициализации char str[] = "Hello!"; // другой вариант инициализации символьного массива char str2[] = { 'H', 'e', 'l', 'l', 'o', '!', '\0' };
В вышеприведенном примере массивы str и str2 содержат одинаковые значения.
9. Присвоение одного массива другому. Пример
В языке программирования C++ (в отличие от других языков) нельзя присваивать непосредственно один массив другому. Присваивать можно только поэлементно с использованием оператора цикла. При этом оба массива должны иметь одинаковый тип элементов.
Пусть заданы два массива целых чисел. Фрагмент кода, который присваивает один массив другому:
// описание массивов A и B int A[10], B[10]; int i; //A = B; // ошибка! for (i=0; i<10; i++) B[i] = 0; for (i=0; i<10; i++) A[i] = B[i];
10. Описание массива структур. Пример
Пусть дано описание структуры, которая содержит информацию о книге:
struct BOOK { char title[50]; char author[50]; int year; float price; };
Это описание определяет новый тип struct BOOK. При таком описании память не выделяется. Это только информация о новом типе данных. Структура должна быть описана за пределами определения любого класса в начале определения пространства имен.
В программе массив из 5 книг (структур) можно описать так:
struct BOOK Books[5];
Доступ к элементам структуры в программе:
strcpy(Books[0].title, "Title-1"); strcpy(Books[0].author, "Author-1"); Books[0].year = 1970; Books[0].price = 28.85;
В вышеприведенном коде использована функция работы со строками
strcpy(str1, str2);
Эта функция копирует строку str2 в строку str1. Чтобы использовать эту и другие функции работы со строками в начале программы (перед описанием пространства имен) нужно указать строку
#include <cstring>
или
#include <string.h>
Связанные темы
- Массивы. Часть 2. Двумерные массивы. Массивы строк. Многомерные массивы
- Массивы. Часть 3. Примеры решения распостраненных задач с одномерными массивами
- Массивы. Часть 4. Примеры решения задач с использованием строк символов
- Структуры. Часть 1. Составные типы данных. Шаблон структуры. Структурная переменная. Структуры в среде CLR. Объявление и инициализация структурной переменной
- Структуры. Часть 2. Выделение памяти для структуры. Вложенные структуры. Массивы native-структур