Как использовать 2d массив с изменяемой длиной в качестве параметров функции - PullRequest
2 голосов
/ 14 января 2020

Вот функция с магическими числами c в качестве длин 2-мерных массивов:

bool function(int char_block_a[7][2], int char_block_b[6][2])
{
    for (int i = 0; i = 7; i++)
    {
        for (int j = 0; j = 6; j++)
        {
            if (char_block_a[i][0] == char_block_b[j][0] && char_block_a[i][1] == char_block_b[j][1])
            {
                return true;
            }
        }
    }
    return false;
}

Вот функция с изменяемой длиной 2-мерного массива, которую я хотел реализовать (просто чтобы показать, что я имелось ввиду):

bool function(int char_block_a[a][2], int char_block_b[b][2])
{
    for (int i = 0; i = a; i++)
    {
        for (int j = 0; j = b; j++)
        {
            if (char_block_a[i][0] == char_block_b[j][0] && char_block_a[i][1] == char_block_b[j][1])
            {
                return true;
            }
        }
    }
    return false;
}

Как я мог это реализовать? Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Аргументы 2D-массива можно передавать с неопределенным количеством строк и передавать соответствующие номера активных строк отдельно. Убедитесь, что в циклах используются правильные тесты:

/* check if 2D arrays have a row with identical values */
bool function(int char_block_a[][2], size_t a, int char_block_b[][2], size_t b) {
    for (size_t i = 0; i < a; i++) {
        for (size_t j = 0; j < b; j++) {
            if (char_block_a[i][0] == char_block_b[j][0]
            &&  char_block_a[i][1] == char_block_b[j][1]) {
                return true;
            }
        }
    }
    return false;
}
1 голос
/ 14 января 2020
bool function(int char_block_a[7][2], int char_block_b[6][2])
                              ^^^                     ^^^
                                 The first dimension is ignored

Вы просто должны передать первые размеры как сложение аргументы:

bool function(int char_block_a[][2], int char_block_b[][2], int a, int b)
                                                            ~~~~~~~~~~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...