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(\"%
When you pass int[3][3]
, the function receives a pointer to the (int*)[3]
which is a pointer to an array of 3 int's. Because an array gets converted into a pointer to its first element when you pass it to a function.
So adjust the function accordingly. One way is to receive it as a pointer to an array. You array indexing is wrong too. You can index just like how you would index a real the array.
void print_matrix(int (*a)[3], int n) {
int i, j;
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++)
printf("%d\t", a[i][j]);
putchar('\n');
}
}
If you use C99, you can pass both dimensions:
void print_matrix(int x, int y, int a[x][y]) {
int i, j;
for(i = 0; i < x; i++) {
for(j = 0; j < y; j++)
printf("%d\t", a[i][j]);
putchar('\n');
}
}
and call it as:
print_matrix(3, 3, matrix);
Just to illustrate how you would access the individual "arrays":
void print_matrix(int (*a)[3], int n) {
int i, j;
for(i = 0; i < n; i++) {
int *p = a+i;
for(j = 0; j < 3; j++)
printf("%d\t", p[j]);
putchar('\n');
}
}