Как передать в функцию многомерный массив?

Столкнулся с такой проблемой:

"выражение должно иметь тип указателя на объект, но имеет тип 'int'"

Почему когда работаю с моим двумерным массивом внутри функции я не могу просто указать на элемент массива как в других частях кода? Что я делаю не так? Может я как-то неправильно передаю массив в функцию?

Вот код функции:

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;
}
→ Ссылка