Массивы в С++

Индексы массивов начинаются с 0. В C++ не выполняется никакой проверки “нарушения границ” массивов, т.е. ничего не может помешать программисту обратиться к массиву за его пределами, но это может вызвать разрушение программы.


 


Инициализация массивов
В C++ предусмотрена возможность инициализации массивов. Формат инициализации массивов подобен формату инициализации других переменных.
тип имя_массива [размер] = {список_значений};


int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
После выполнения этой инструкции элемент i[0] получит значение 1, а элемент i[9] - значение 10.


Или можно только объявить массив, а заполнять в процессе:
int arr[20];
arr[2] = 333;


Например, следующий фрагмент кода инициализирует массив str фразой привет:


char str[7] = "привет";
Это равнозначно поэлементной инициализации


char str[7] = {'n','р','и','в','е','т','\0'};

Поскольку в C++ строки должны завершаться нулевым символом, убедитесь, что при объявлении массива его размер указан с учетом признака конца. Именно поэтому в предыдущем примере массив str объявлен как 7-элементный, несмотря на то, что в слове “привет” только шесть букв. При использовании строкового литерала компилятор добавляет нулевой признак конца строки автоматически.


 


Безразмерная инициализация


В C++ предусмотрена возможность автоматического определения длины массивов путем использования их “безразмерного” формата. Если в инструкции инициализации массива не указан его размер, C++ автоматически создаст массив, размер которого будет достаточным для хранения всех значений инициализаторов.


char е1[] = "Деление на 0\n";
char е2[] = "Конец файла\n";
Помимо удобства в первоначальном определении массивов, метод “безразмерной” инициализации позволяет изменить любое сообщение без пересчета его длины. Тем самым устраняется возможность внесения ошибок, вызванных случайным просчетом.


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


int sqrs[][2] = {
1,1,
2,4
};
Преимущество такой формы объявления перед “габаритной” (с точным указанием всех размерностей) состоит в том, что программист может удлинять или укорачивать таблицу значений инициализации, не изменяя размерности массива.


 


 


Пример. Код который помещает в массив числа от 0 до 9



 
    int sample[10]; // Эта инструкция резервирует область памяти для 10 элементов типа int
    int t;
    // Помещаем в массив значения
    for(t=0; t<10; ++t) sample[t]=t;
 
    // Отображаем массив
    for(t=0; t<10; ++t) cout << sample[t] << ' ';
 

 


 


В C++ нельзя присвоить один массив другому. В следующем фрагменте кода, например, присваивание а = Ь; недопустимо.


int а[10], b[10];
а = b; // Ошибка!!!

 


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


 


 


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


 


Простейший многомерный массив — двумерный. Двумерный массив, по сути, представляет собой список одномерных массивов. Чтобы объявить двумерный массив целочисленных значений размером 10x20 с именем twod, достаточно записать следующее:

int twod[10][20];


 


 


Многомерные массивы инициализируются по аналогии с одномерными. Например, в следующем фрагменте программы массив sqrs инициализируется числами от 1 до 10 и квадратами этих чисел.

int sqrs[10][2] = {
1,  1,
2,  4,
3,  9,
4,  16,
5,  25,
6,  36,
7,  49,
8,  64,
9,  81,
10,100
};


 


Или можно записать так:


int sqrs[10][2] = {
{1, 1},
{2, 4},
{3, 9},
{4, 16},
{5, 25},


{6, 36},


{7, 49},


{8, 64},


{9, 81},


{10, 100}
};


 



 


 


Сколько памяти занимает массив


Место хранения для всех элементов массива определяется во время компиляции. Кроме того, память, выделенная для хранения массива, используется в течение всего времени существования массива. Для определения количества байтов памяти, занимаемой двумерным массивом, используйте следующую формулу:
число байтов = число строк х число столбцов х размер типа в байтах
Следовательно, двумерный целочисленный массив размерностью 10x5 занимает в памяти 10x5x2, т.е. 100 байт (если целочисленный тип имеет размер 2 байт).


 


 


 


Массивы строк


Массив строк — это специальная форма двумерного массива символов.
Получить доступ к отдельной строке довольно просто: достаточно указать только левый индекс. Например, следующая инструкция вызывает функцию gets() для записи третьей строки массива gets(str_array[2]);


Чтобы лучше понять, как следует обращаться с массивами строк, рассмотрим следующую короткую программу, которая принимает строки текста, вводимые с клавиатуры, и отображает их на экране после ввода пустой строки.


 


#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main () {
    int t, i;
    char text[100][620];
    for(t=0; t<100; t++)    {
        cout << t << " :";
        gets(text[t]);
        if (!text[t] [0]) break; // Выход из цикла по пустой строке.
    }
    // Отображение строк на экране.
    for(i=0; i<t; i++)
    cout << text[i] << '\n';
    return 0;
}



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы