Пример 4. Вычислите размер памяти, которая будет отводиться для хранения следующих массивов:
int A[5][2]; //int 4 байта * 5 * 2 = 40
float B[3][10]; //float 4 байта * 3 * 10 = 120
char C[25][4]; //char 1 байт * 25 * 4 = 100
При задании размера массива следует пользоваться константой.
Пример 5. Объявление многомерных массивов с использованием констант
const int N = 5;
const int M = 25;
const int K = 2*N;
int A[N][M];
float B[K][N];
char C[M][M];
Рассмотрим схему размещения массива А, состоящего из N строк и M столбцов.
Под массив компилятор резервирует непрерывный участок оперативной памяти, в котором элементы располагаются в следующем порядке:
A[0][0] A[0][1] … A[0][M-1]
A[1][0] A[1][1] … A[1][M-1]
A[N-1][0] A[N-1][1] … A[N-1][M-1]
Инициализация массива
При объявлении многомерного массива имеется возможность задать значения элементам массива.
Синтаксис объявления массива с инициализацией:
тип имя_массива [размер1] [размер2]… [размерN] = {список_инициализации};
где список_инициализации – последовательность значений, перечисленных через запятую или с использованием вложенных фигурных скобок.
Пример 6. Какие значения будут иметь элементы массива?
const int N=3, M=4;
int A[N][M]={0};
int B[N][N]={1,2,3,4,5,6,7,8,9};
int C[N][N]={{1,2,3},{4,5,6},{7,8,9}};
int D[N][N]={{1,2},{},{7}};
Или
int D[N][N]={{1,2,0},{0,0,0},{7,0,0}};
Когда в списке инициализации указано больше значений, чем количество элементов в массиве, то это будет ошибкой компиляции.
При объявлении массива разрешается не указывать количество элементов в самых левых скобках (количество строк в двумерном массиве), а по списку инициализации будет вычислен размер памяти, который необходим для хранения такого массива и соответственно размер первого индекса.
Для определения в программе, сколько же строк содержит массив можно воспользоваться следующей формулой:
«Кол-во элементов» = «Размер массива» /
(«Размер элемента»*«Кол-во столбцов»)
Пример 7. Сколько строк будет в двумерном массиве?
int D[][N]={1,2};
int K=sizeof(D)/(sizeof(D[0][0])*N); //кол-во строк = 1
int D[][N]={1,2,3,4,5,6,7}; //кол-во строк = 3
int D[][N]={{1,2,3},{4},{5},{6,7}}; //кол-во строк = 4