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.