Двумерные массивы. Основы

Двумерный массив

Двумерный массив - это массив, у каждого элемента которого два индекса (часто такие массивы называют одним словом - матрица). 
В матрице удобно хранить и обрабатывать различные табличные данные. Как любая таблица состоит из строк и столбцов, так и матрицы состоят из строк и столбцов.
Для наглядности Вы можете представлять массив следующим образом:
Хотя, фактически в памяти компьютера матрица будет выглядеть следующим образом:

Чтобы использовать матрицу в программе, ее необходимо так же как и обычный массив объявить, указывая тип данных и два размера (числами или константами). Также можно (и желательно) сразу задать начальные значения. Например, обнулить все элементы.
Пример 1: Объявление массива размером 3 строки и 3 столбца с произвольными начальными значениями
int A[3][3] = { {0,1,2},
                {3,4,5},
                {6,7,8} };
Пример 2: Объявление массива размером 5 строк и 10 столбцов (размер задаем через константу) с нулевыми начальными значениями
const int N = 5, M = 10;
double B[N][M] = {};
Для обращения к конкретному элементу матрицы используем две пары скобок, в первой скобке указываем номер строки, во второй - номер столбца.
Пример:  
A[0][2] = 100;  //нумерация строк и столбцов начинается с нуля

Заполнение матрицы и вывод ее на экран

Для того, чтобы обойти всю матрицу необходим вложенный цикл. Посмотрим заполнение и вывод матрицы на примере программы, которая запрашивает значения элементов с клавиатуры и просто выводит заполненную матрицу на экран.
#include <iostream>
using namespace std;
int main() {
	/* Объявление двумерного массива*/
	const int N = 2, M = 3;
	int A[N][M];
	/*заполняем элементы матрицы с клавиатуры построчно*/
	int i, j;
	for (i = 0; i < N; i++) 
		for (j = 0; j < M; j++) 
			cin >> A[i][j];
		
	//Вывод всех элементов матрицы на экран построчно
	for (i = 0; i < N; i++) {  //внешний цикл отвечает за перебор строк
		for (j = 0; j < M; j++)  //цикл для вывода элементов строки
			cout << A[i][j] << " ";
		cout << endl; //после вывода элементов j-й строки делаем переход на новую строку
	}
	return 0;
}
В вышеприведенном примере, как заполнение, так и вывод матрицы происходит по строчкам (сначала мы перебираем все значения j - индекс столбцов, и только потом меняется индекс строки - i)
Меняя циклы местами (внутренний с внешним) можно осуществлять заполнение и/или вывод массива по столбцам