cell game[n][m];
Это не законно C++. Вы используете расширение для компилятора. На этом этапе я советую вам не использовать какие-либо расширения для компилятора. Используйте только стандартный C++. В стандартном C++ нет массивов переменной длины. Не используйте массивы в своих программах на C++. Чтобы получить правильную функциональность массива переменной длины. Вы должны использовать std::vector
вместо этого, как это:
std::vector<std::vector<cell>> game;
Далее
&game[0][0]
не является адресом 2D массива. Это адрес первого элемента массива. Он не содержит информации о количестве элементов. Он потерян навсегда. Вы не можете передать его некоторой функции и ожидать, что размер массива будет восстановлен. Чтобы получить правильную функциональность массива со встроенной функцией размера, используйте std::vector
.
И последнее, но не в последнюю очередь,
(sizeof(arr[0])/sizeof(arr[0][0]));
arr
является cell*
. arr[0]
- cell
. arr[0][0]
недействителен, так как cell
не является массивом, а не указателем, а также не имеет настраиваемого оператора []
. В любом случае вы не можете использовать sizeof
для восстановления количества элементов в массиве из указателя на его первый элемент. Чтобы получить правильную функциональность массива со встроенной функцией размера, используйте std::vector
.
Обратите внимание, что 'sizeof (arr [0])' не будет работать, как вы думаете, будет – wimh
Обратите внимание, что массивы переменной длины являются нестандартными функциями. –
Прежде всего, вы не можете сделать это с помощью массивов стиля C объявленные как вы их объявляете, потому что они не могут быть динамически разбросаны. Чтобы делать то, что вы хотите с массивами C, вам нужно будет использовать 'malloc' для выделения кучной памяти. Поскольку вы используете C++, вам может быть проще использовать 'std :: vector' –