我想在更复杂的问题中使用此代码,但我没有让它工作.为什么我的矩阵不打印?
#include <stdio.h>
#include <stdlib.h>
void print_mat(int **a, int n)
{
printf("\n");
int k,t;
for (k=1;k<=n;k++)
{
for (t=1;t<=n;t++)
printf("%d ", a[k][t]);
printf("\n");
}
}
int main()
{
int i,j,n,**a;
printf("Chess board size=");
scanf("%d", &n);
a=(int **)malloc(n*sizeof(int));
for (i=1;i<=n;i++)
a[i]=(int*)malloc(n*sizeof(int));
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
a[i][j]=-1;
print_mat(a,n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你应该首先malloc的大小int *不int,改变
a = ( int ** )malloc( n * sizeof( int ) );
Run Code Online (Sandbox Code Playgroud)
至
a = malloc( n * sizeof( int* ) ); //also no need to cast.
Run Code Online (Sandbox Code Playgroud)
另外,正如@Russell Borogove建议的那样,改变循环for( i = 0; i < n; i++ )而不是来自1 to n.