I created two 2D arrays (matrix) in C in two different ways.
I don't understand the difference between the way they're represented in the memory, and the reason why I can't refer to them in the same way:
scanf("%d", &intMatrix1[i][j]); //can't refer as  &intMatrix1[(i * lines)+j])
scanf("%d", &intMatrix2[(i * lines)+j]); //can't refer as &intMatrix2[i][j])
What is the difference between the ways these two arrays are implemented and why do I have to refer to them differently? 
How do I refer to an element in each of the arrays in the same way (?????? in my printMatrix function)?
int main()
{
   int **intMatrix1;
   int *intMatrix2;
   int i, j, lines, columns;
   lines = 3;
   columns = 2;
   /************************* intMatrix1 ****************************/
   intMatrix1 = (int **)malloc(lines * sizeof(int *));
   for (i = 0; i < lines; ++i)
      intMatrix1[i] = (int *)malloc(columns * sizeof(int));
   for (i = 0; i < lines; ++i)
   {
       for (j = 0; j < columns; ++j)
       {
       printf("Type a number for intMatrix1[%d][%d]\t", i, j);
       scanf("%d", &intMatrix1[i][j]); 
       }
   }
   /************************* intMatrix2 ****************************/ 
   intMatrix2 = (int *)malloc(lines * columns * sizeof(int));
   for (i = 0; i < lines; ++i)
   {
       for (j = 0; j < columns; ++j)
       {
       printf("Type a number for intMatrix2[%d][%d]\t", i, j);
       scanf("%d", &intMatrix2[(i * lines)+j]);
       }
   }
   /************** printing intMatrix1 & intMatrix2 ****************/
   printf("intMatrix1:\n\n");
   printMatrix(*intMatrix1, lines, columns);
   printf("intMatrix2:\n\n");
   printMatrix(intMatrix2, lines, columns);
}
/************************* printMatrix ****************************/
void printMatrix(int *ptArray, int h, int w)
{
    int i, j;
    printf("Printing matrix...\n\n\n");
    for (i = 0; i < h; ++i)
        for (j = 0; j < w; ++j)
        printf("array[%d][%d] ==============> %d\n, i, j, ??????);
}