У меня есть код, как это:Matrix, указатели, C *
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;
}
Я получаю ошибку GCC:
expected ‘int **’ but argument is of type ‘int (*)[3]
Я прочитал все темы, связанные, но я до сих пор не удалось найти ответ на свой вопрос , поэтому перед тем, как вы пометите его как повторяющийся, прочитайте его.
Указатели не являются массивами, я это понимаю. Я где-то читал, что элементы не являются последовательными, в этом случае это может произойти: 111 222 333 -> 111 - адрес первого массива int, 222 - адрес второго массива int, а 333 - адрес третьего массива int. Но если это так, я не понимаю, почему GCC дает мне ошибку.
Прежде всего, я хотел бы, чтобы кто-то подтвердил, что то, что я прочитал, верно. Тогда я был бы очень признателен, если бы кто-нибудь мог дать мне ответ.
Обратите внимание, что я понимаю, что *(a+i*n+j)
неверно, если память для матрицы не является последовательной.
С уважением.
типы не эквивалентны, 'INT [3] [3]' является contigous хранение 9 целых чисел, в то время как '' INT ** является указателем (* возможно, массив указателей *) указателей. –
Можете ли вы рассказать мне, какие могут быть возможные исправления? –
Но вы ошибаетесь, можете ли вы написать 'a [j] [i]'? –