Двумерный массив есть, в сущности, список, составленный из одномерных массивов. Для того, чтобы объявить двумерный массив twoD целых чисел размера 10x20, вы должны написать:
int twoD[10][20];
Обратите особое внимание на это объявление. В отличие от некоторых других компьютерных языков, которые для разделения размерностей массива используют запятые, в С++ каждый размер заключается в собственные квадратные скобки. Например, для обращения к элементу с номером 3,5 в массиве twoD вы должны использовать обозначение twoD[3][5].
В приводимом ниже примере двумерный массив заполняется числами от 1 до 12:
#include <iostream>
using namespace std;
int main(){
int t,i, nums[3][4];
for(t=0; t < 3; ++t) {
for(i=0; i < 4; ++i) {
nums [t][i] = (t * 4) + i + 1;
cout << nums[t][i] << ' ';
}
cout << '\n';
}
return 0;
}
В этом примере элемент nums[0][0] будет иметь значение 1, nums[0][l] - значение 2, nums[0][2] - значение 3 и т. д. Значение последнего элемента nums[2][3] будет равно 12. Весь массив можно представить себе так, как это изображено на рисунке:
Двумерные массивы сохраняются в памяти в виде матрицы, состоящей из строк и столбцов, причем первый индекс определяет строку, а второй — столбец. Отсюда следует, что если элементы массива обрабатываются в том порядке, в каком они фактически располагаются в памяти, то правый индекс изменяется быстрее левого.
Безусловно, наиболее важным применением одномерных массивов является создание символьных строк. С++ поддерживает строки двух видов. Первый, наиболее часто используемый, — это строка с завершающим нулем или, другими словами, массив символов, заканчивающийся нулем. Строка с завершающим нулем содержит символы, образующие эту строку, за которыми помещается ноль. Такие строки пользуются чрезвычайно широко, так как они обеспечивают высокий уровень эффективности и предоставляют программисту возможность выполнять разнообразные строковые операции. Когда программист на С++ использует термин "строка", он (или она) обычно имеет в виду и именно строку с завершающим нулем. Второй вид строк, определенный в С++ — это класс string, который входит в библиотеку классов С++. Таким образом, stringне является встроенным типом. Класс stringпозволяет использовать объектно-ориентированный подход при обработке строк, однако он используется не так широко, как строка с завершающим нулем. Здесь мы рассмотрим первый вид строк.
Объявляя символьный массив, который будет содержать строку с завершающим нулем, вы должны задать ему длину на один символ больше, чем у самой длинной помещаемой в него строки. Если, например, вы хотите объявить массив str, в котором будет находиться 10-и символьная строка, то вы должны написать следующее:
char str[11] ;
Задание величины 11 в качестве длины массива обеспечит в строке место для завершающего нуля.
Как вы уже знаете, С++ позволяет определять символьные константы. Символьная константа представляет собой список символов, заключенный в двойные кавычки. Вот несколько примеров:
“Hello!” “I like C++” “Mars” “”
Добавлять ноль в конец строки вручную нет необходимости; компилятор С++ сделает это сам. В результате строка "Mars" будет выглядеть в памяти таким образом:
Последняя строка в нашем примере выглядит как "". Такая строка называется нулевой строкой. Она содержит только завершающий ноль и больше ничего. Нулевые строки используются в программах в качестве пустых строк.