当我测试您的代码时,我会收到这些错误和警告。
/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