C ++: получение размера строки многомерного массива, переданного функции

Я пытаюсь написать функцию, которая будет распечатывать содержимое многомерного массива. Я знаю размер столбцов, но не размер строк.

РЕДАКТИРОВАТЬ: Поскольку я не дал этого ясно, массивы, передаваемые этой функции, НЕ выделяются динамически. Размеры известны во время компиляции.

Я тестирую его, используя массив 3x2. Вот функция в ее нынешнем виде:

void printArrays(int array1[][2], int array2[][2]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "\narray1[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array1[i][j]
                 << "\tarray2[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array2[i][j];
        }
    }
}

Очевидно, это работает, только если я знаю, что размер «i» равен 3 (в данном случае это так). В идеале, однако, я бы хотел, чтобы функция работала независимо от размера первого измерения.

Я думал, что смогу сделать это, используя функцию sizeof (), например

int size = sizeof(array1);

... математика оттуда.

Вот странная часть. Если я использую функцию sizeof () внутри массива, она возвращает значение 4. Я могу использовать обозначение указателя для разыменования массива:

int size = sizeof(*array1);

... но на самом деле это возвращает значение 8. Это странно, потому что общий размер должен составлять строки (которые = 3) * столбцы (= 2) * sizeof (int) (= 4) или 24. И действительно, это результат, когда я использую sizeof (* array1) вне функции.

Кто-нибудь знает, что здесь происходит? Что еще более важно, есть ли у кого-нибудь решение?

7
задан Saksham 17 November 2013 в 11:02
поделиться