Помогите прочесть код функции c++
Есть функция, которая в игре "Змейка" выводит на экран игровое поле, ограниченное квадратом из знаков "#" размером 13х17. Функция исправно работает, но я затрудняюсь в ее понимании.
char a[1000][1000]; // массив таблицы
const int N = 13, M = 17; // размер таблицы (ширина и высота)
void show_table()
{
system("cls");
for (int i = 0; i <= N + 1; ++i)
for (int j = 0; j <= M + 1; ++j)
cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a[i][j]) << (j <= M ? "" : "\n");
}
А именно интересует здесь строка:
cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a[i][j]) << (j <= M ? "" : "\n");
Никогда раньше я не сталкивался с такими строками, поэтому не совсем понимаю, что здесь написано. Полагаю, что-то вроде "Если i равно нулю, или j равно нулю, или i равно N+1, или j равно M+1, то а [i][j] равен '#', вывести на экран a[i][j]. Затем если j меньше или равно M, то вывести на экран непонятно что, а затем переход на новую строку". Поправьте, где я неправ
Строка интересная, хоть и оказалась сложна в прочтении. Объясните пожалуйста что означают здесь знаки вопроса и двоеточия, прав ли я оказался в своей догадке.
А также объясните, почему цикл for (int i = 0; i <= N + 1; ++i) и вложенный цикл for (int j = 0; j <= M + 1; ++j) нормально работают без фигурных скобок.