Как передать в функцию многомерный массив?
Столкнулся с такой проблемой:
Почему когда работаю с моим двумерным массивом внутри функции я не могу просто указать на элемент массива как в других частях кода? Что я делаю не так? Может я как-то неправильно передаю массив в функцию?
Вот код функции:
bool check_cell(int x, int y, bool cells)
{
if (x < sizeof(cells) && y < sizeof(cells))
{
if (cells[x][y])
{
return 1;
}
return 0;
}
return 1;
}
Подчёркивает "[x]" на пятой строке, пишет: "выражение должно иметь тип указателя на объект, но имеет тип 'int'".
И вот соответственный пример вызова этой функции:
check_cell(x, y, cells)
Ответы (2 шт):
Автор решения: NikitaNet
→ Ссылка
Решение нашёл. Надо было по другому объявить функцию.
#include <cstddef>
#include <iostream>
const std::size_t DIM1 = 300;
const std::size_t DIM2 = 300;
bool cells[DIM1][DIM2];
bool check_cell(int x, int y, bool cells[DIM1][DIM2])
{
if (x < DIM1 and y < DIM2)
{
if (cells[x][y])
{
return 1;
}
return 0;
}
return 1;
}
int main() {
std::cout << check_cell(0, 0, cells);
return 0;
}
Автор решения: Maxim
→ Ссылка
Нужно использовать std::vector вместо массивов для подобных функций
#include <iostream>
#include <vector>
bool check_cell(int x, int y, const std::vector<std::vector<bool>> &cells)
{
if (x < cells.size() and y < cells[x].size())
{
return cells[x][y];
}
return 1;
}
int main() {
std::vector<std::vector<bool>> data = {
{true, false, false, false},
{false, false, false, false},
{false, false, false, false},
{false, false, false, false}};
std::cout << check_cell(0, 0, data);
return 0;
}
