Я пытаюсь написать функцию, которая будет распечатывать содержимое многомерного массива. Я знаю размер столбцов, но не размер строк.
РЕДАКТИРОВАТЬ: Поскольку я не дал этого ясно, массивы, передаваемые этой функции, НЕ выделяются динамически. Размеры известны во время компиляции.
Я тестирую его, используя массив 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) вне функции.
Кто-нибудь знает, что здесь происходит? Что еще более важно, есть ли у кого-нибудь решение?