CCCPaste
#include 

using namespace std;

const int size = 3;

template
void print(T matrix) {
    cout << "[\n";
 
    for (int y = 0; y < size; ++y) {
        cout << "\t[";
        for (int x = 0; x + 1 < size; ++x)
            cout << matrix[y][x] << ", ";
        cout << matrix[y][size - 1] << "]";
 
        if (y + 1 == size) cout << "\n]\n";
        else cout << ",\n";
    }
}
 
int** multiply(int a[][size], int b[][size]) {
    int** c = new int*[size];
    int sum;
 
    for (int i = 0; i < size; ++i) c[i] = new int[size];
    for (int y = 0; y < size; ++y)
    for (int x = 0; x < size; ++x) {
        sum = 0;
        for (int z = 0; z < size; ++z) sum += a[y][z] * b[z][x];
        c[y][x] = sum;
    }
    
    return c;
}
 
int main() {
    int a[][size] = {
        {-1, -2, 3},
        {0, 2, -1},
        {-1, 3, 0}
    };
 
    int b[][size] = {
        {1, 5, 1},
        {2, 1, 2},
        {3, 2, 3}
    };
 
    int** c = multiply(a, b);
 
    cout << "a = "; print(a); cout << "\n";
    cout << "b = "; print(b); cout << "\n";
    cout << "c = "; print(c); cout << endl;

    for(int i = 0; i < size; ++i)
        delete[] c[i];
    delete[] c;
 
    return 0;
}