#include <stdio.h>
#include <stdlib.h>


void matrixAddition(int **a, int **b, int **c, int row_num, int col_num)
{

    for (int row = 0; row < row_num; row++)
    {
        for (int col = 0; col < col_num; col++)
        {
            c[row][col] = a[row][col] + b[row][col];
        }
    }

}

void printMatrix(int **matrix, int row_num, int col_num)
{
    for (int i = 0; i < row_num; i++)
    {
        for (int j = 0; j < col_num; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    printf("\n");
    printf("\n");
}

int main()
{
    int col_num = 3;
    int row_num = 3;

    int **matrix1 = (int**) malloc(sizeof(int*) * row_num);
    int **matrix2 = (int**) malloc(sizeof(int*) * row_num);
    int **matrix3 = (int**) malloc(sizeof(int*) * row_num);

    int starting_number = 1;

    // Initializing the matrices. Values in matrix 2 will be double the values at corresponding indices in matrix 1.
    for (int i = 0; i < row_num; i++)
    {
        matrix1[i] = (int*) malloc(sizeof(int) * col_num);
        matrix2[i] = (int*) malloc(sizeof(int) * col_num);
        matrix3[i] = (int*) malloc(sizeof(int) * col_num);

        for(int j = 0; j < col_num; j++)
        {
            matrix1[i][j] = starting_number;
            matrix2[i][j] = starting_number * 2;
            starting_number++;
        }
    }

    printMatrix(matrix1, row_num, col_num);
    printMatrix(matrix2, row_num, col_num);

    // Adding matrix1 and matrix2, storing results in matrix 3.
    matrixAddition(matrix1, matrix2, matrix3, row_num, col_num);

    printMatrix(matrix3, row_num, col_num);
}