Когда я проверить свой код, я получаю эти ошибки и предупреждения.
/home/dac/ClionProjects/gnu/main.c: In function ‘main’:
/home/dac/ClionProjects/gnu/main.c:11:9: warning: passing argument 1 of ‘print’ from incompatible pointer type [-Wincompatible-pointer-types]
print(a,3,3);
^
/home/dac/ClionProjects/gnu/main.c:3:6: note: expected ‘int **’ but argument is of type ‘int (*)[3]’
void print(int **,int,int);
^
/home/dac/ClionProjects/gnu/main.c: In function ‘print’:
/home/dac/ClionProjects/gnu/main.c:21:35: error: expected ‘)’ before ‘;’ token
printf("%d ",*((A+i*n12)+j);
^
/home/dac/ClionProjects/gnu/main.c:21:14: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d ",*((A+i*n12)+j);
^
/home/dac/ClionProjects/gnu/main.c:22:5: error: expected ‘;’ before ‘}’ token
}
^
Если вы просто хотите, чтобы напечатать матрицу, вы можете использовать матрицу, созданную и переобъявить как распечатать его, аналогично следующий код.
#include <stdio.h>
#define size 3
void print_matrix(int x, int y, int a[size][size]) {
int i, j;
for(i = 0; i < x; i++) {
for(j = 0; j < y; j++)
printf("%d\t", a[i][j]);
putchar('\n');
}
}
int main() {
int a[size][size]={
{1,0,1},{1,1,1}, {1,1,1}
};
print_matrix(size,size, a);
return 0;
}
Выход
/system/cmake/generated/gnu-fadf49ce/fadf49ce/Debug/gnu
1 0 1
1 1 1
1 1 1
Process finished with exit code 0
Если вы хотите узнать о двойных указателей, попробуйте использовать и манипулировать argv
вашей программы - это уже двойной указатель. Или создайте новые матрицы динамически: int **matrix = malloc(size * sizeof(int *));
Или если вы хотите использовать версию указателя исходной проблемы (печать матрицы с помощью указателей).
#include <stdio.h>
#define size 3
void print_matrix(int (*a)[size], 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');
}
}
int main() {
int a[][size]={
{1,0,1},{1,1,1}, {1,1,1}
};
print_matrix(a, size);
return 0;
}
Приведенный выше код использует указатели и печатает ту же матрицу:
1 0 1
1 1 1
1 1 1
Чтобы узнать указатели, вы можете объявить матрицу указателей и пытаются манипулировать ею, следующий создает и выводит матрицу случайные числа с помощью указателей.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define size 3
void print_matrix(int ***matrix) {
for (unsigned row = 0; row < size; row++) {
for (unsigned column = 0; column < size; column++) {
printf("%d ", matrix[row][column]);
}
printf("\n");
}
}
int main() {
int ***matrix = malloc(size * sizeof(int **));
if (!matrix) abort();
srand(time(NULL));
for (unsigned row = 0; row < size; row++) {
matrix[row] = calloc(size, sizeof(int *));
if (!matrix[row]) abort();
for (unsigned column = 0; column < size; column++) {
matrix[row][column] = rand();
}
}
print_matrix(matrix);
return 0;
}
Выход
2058554958 959327445 396140031
214331704 706399125 124749117
1280566165 206604059 668072276
Посмотрите также на [это SO post] (http://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer) – LPs
У вас также отсутствует закрывающая скобка для printf –
@LPs. Это лучший дубликат iof [\ [this \]] (http://stackoverflow.com/questions/1052818/create-a-pointer-to-two-dimensional-array) вопроса. – sjsam