我只是试图打印这个矩阵,说实话我不知道为什么我会遇到某些编译器错误。我得到了#34;形式参数不完整"以及M和N未声明的错误。
int print_matrix(int*[][]);
int main()
{
int N = rand() % 10;
int M= rand() % 10;
int matrix[N][M];
int n;
int m;
for (n=0; n<N; n++)
{
for (m=0; m<M; m++)
{
matrix[N][M]= rand()%20 +(-10);
}
}
print_matrix(&matrix);
return 0;
}
int print_matrix(int *matrix[N][M])
{
int m;
int n;
for (n=0; n<N; n++)
{
for (m=0; m<M; m++)
{
printf("%2d", matrix[n][m]);
}
}
return 0;
}
答案 0 :(得分:5)
您的代码中有一些错误,最重要的是您不需要传递数组的地址,如果这样做,您应该在print_matrix()
函数中正确处理它。 / p>
以下代码修复了所有问题
#include <stdlib.h>
#include <stdio.h>
#define SIZE 10
int print_matrix(int N, int M, int matrix[N][M]);
int
main(void)
{
int N = rand() % SIZE;
int M = rand() % SIZE;
int matrix[N][M];
int n;
int m;
for (n = 0 ; n < N ; n++)
{
for (m = 0 ; m < M ; m++)
matrix[n][m]= rand() % 20 + (-10);
}
print_matrix(N, M, matrix);
return 0;
}
int
print_matrix(int N, int M, int matrix[N][M])
{
int m;
int n;
for (n = 0 ; n < N ; n++)
{
for (m = 0 ; m < M ; m++)
printf("%5d ", matrix[n][m]);
fputc('\n', stdout);
}
return 0;
}
我现在解释我修复的内容
print_matrix()
。N
和M
,因此您总是在数组中的最后一个元素之后访问该元素。&
和*
,当数组是函数的参数时,数组自动转换为指针,尝试sizeof(matrix)
然后你可以验证它与sizeof(void *)
相同。你可以这样做
int
print_matrix(int N, int M, int matrix[N][M])
因为你也可以这样做
int N = rand() % SIZE;
int M = rand() % SIZE;
int matrix[N][M];
反之亦然。