I have code like this:
void print_matrix(int **a, int n) {
    int i, j;
    for(i = 0; i < n; i++) {
        for(j = 0; j < n; j++)
            printf("%d\t", *(a+i*n+j));
        putchar('\n');
    }
}
int main () {
  int matrix[3][3];
  insert (matrix); /* Function that reads Matrix from stdin */
  print_matrix(matrix, 3);
  return 1; 
}
I receive GCC error:
expected ‘int **’ but argument is of type ‘int (*)[3]
I read all related topics but I still couldn't find answer to my question, so before you mark it as duplicate please read it.
Pointers are not Arrays, I understand that. I've read somewhere that elements are not sequential, in that case, this could happen: 111 222 333 -> 111 is address of first int array, 222 is address of second int array, and 333 is address of third int array. But if this is the case, I don't understand why GCC gives me an error.
First I would like someone to confirm me that what I've read is true. Then I would really appreciate if someone could give me answer.
Note that I understand that *(a+i*n+j) is incorrect in case that memory for matrix is not sequential. 
Best regards.
 
     
     
     
     
    