незваный гость писал(а):
Дело в том, что в С в принципе нет двумерных массивов. «int table[size][size]» — это не двумерный массив, а массив массивов, что не одно и тоже.
Я не большой знаток Си, но рискну не согласиться. Это одно и то же. Когда я объявляю int table[size][size], то память выделяется под весь массив массивов статически (ну или в стеке, если это локальная переменная). Проверил в Borland C++ и в MSVC 6.0 — работает. Единственно, что — size должно быть константным выражением, т.е. const int не проходит, нужно #define size <Нужный_размер>.
Что касается исходного вопроса
Dmytro Sheludchenko — то тут нужно подумать, как передавать массив. Просто int *table, как в исходной программе, не пройдёт, т.к. теряется информация о структуре (массив передаётся как одномерный). int **table — это вообще будет ошибкой, т.к. это указатель на массив указателей на массивы типа int, а у нас массив массивов — это, действительно, разные вещи.
Самый простой вариант — когда таблица table не передаётся в функции (initTable, movesKnight), а просто в функциях используется глобальная переменная table.
Может ещё сделать что-то типа typedef int[size] row; и передавать в функции row *table.