Wenn ich Ihren Code testen, erhalte ich diese Fehler und Warnungen.
/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
}
^
Wenn Sie nur eine Matrix drucken möchten, können Sie die Matrix verwenden Sie erstellt und neu deklarieren, wie Sie es drucken, ähnlich dem folgenden Code ein.
#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;
}
Ausgabe
/system/cmake/generated/gnu-fadf49ce/fadf49ce/Debug/gnu
1 0 1
1 1 1
1 1 1
Process finished with exit code 0
Wenn Sie über zwei Zeiger lernen, versuchen Sie es mit und die argv
Ihres Programms Manipulation - es ist bereits ein Doppelzeiger. Oder erstellen Sie neue Matrizen dynamisch: int **matrix = malloc(size * sizeof(int *));
Oder wenn Sie die Zeigerversion Ihres ursprünglichen Problems (Drucken einer Matrix mit Zeigern) verwenden möchten.
#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;
}
Der obige Code verwendet Zeiger und druckt die gleiche Matrix:
1 0 1
1 1 1
1 1 1
Zeiger zu lernen, können Sie eine Matrix von Zeigern erklären und versuchen, es zu manipulieren, wird die folgende erstellt und druckt eine Matrix aus Zufallszahlen mit Zeigern.
#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;
}
Ausgabe
2058554958 959327445 396140031
214331704 706399125 124749117
1280566165 206604059 668072276
Werfen Sie einen Blick auch auf [diese SO post] (http://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer) – LPs
Ihnen fehlt auch eine schließende Klammer für den printf –
@LPs. Dies ist eine bessere Frage (http://stackoverflow.com/questions/1052818/create-a-pointer-to-two-dimensional-array). – sjsam