Выводятся значения мусора, а не адрес массива. Вот почему. В этом фрагменте кода
void matrixMulti(const int a[][2], const int rows) {
int b[2][2];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
b[i][j] += a[i][k] * a[k][j];
}
}
}
Вы выделили пространство для int b[2][2]
, но не инициализировали его значением. Это было бы хорошо, кроме как в теле цикла for. b[i][j] += a[i][k] * a[k][j];
<=> b[i][j] = b[i][j] + a[i][k] * a[k][j];
вы ссылаетесь на значение b[i][j]
до его инициализации. Другими словами, вы говорите, что b[i][j]
равно b[i][j] + a[i][k] * a[k][j]
, но вы не можете сделать это, так как значение b[i][j]
неизвестно.
Решением этого является инициализация int b[2][2] = {{0,0},{0,0}};