C中的指针。为什么不是';我的二维阵列没有打印出来吗?
我想在一个更复杂的问题中使用这段代码,但我没有让它工作。为什么我的矩阵没有打印出来C中的指针。为什么不是';我的二维阵列没有打印出来吗?,c,pointers,C,Pointers,我想在一个更复杂的问题中使用这段代码,但我没有让它工作。为什么我的矩阵没有打印出来 #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]
#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;
}
#包括
#包括
无效打印材料(整数**a,整数n)
{
printf(“\n”);
int k,t;
对于(k=1;k您应该首先对int*
的大小进行malloc,而不是int
,更改
a = ( int ** )malloc( n * sizeof( int ) );
到
此外,正如@Russell Borogove所建议的,将循环更改为(i=0;i
,而不是从1更改为n
a=(int**)malloc(n*sizeof(int));
更改为a=mallo(n*sizeof(int*)
在某些系统上,int
和int*
(指针)的大小可能相同,但这可能是造成问题的原因
也
for(i=1;i您需要养成在C数组中使用基于零的索引的习惯,并且仅在向用户呈现内容时才将它们显示为基于1的索引
更改(i=1;i行的
a=(int **)malloc(n*sizeof(int));
应该读
a=malloc(n*sizeof(int *));
我知道,但对于这个特殊的问题,从一开始比从零开始更有效。这不是“更有效”,只是更熟悉。在这种情况下,这也是错误的-a[n]不是分配的指针,[0][n]在a[0]的末尾缓冲区分配。养成在C中使用基于0的索引的习惯,并仅在面向用户的显示中显示为基于1的索引。这是认真的。而不是a=malloc(n*sizeof(*a));
,但是+1表示“无需强制转换”。那么int(a)[n]=malloc nsizeof(int[n])呢?@RamyAlZuhouri,我不明白你指的是什么。要分配一个指向数组的指针,这样所有的内存都是相邻的,并且可以使用像memset这样的函数在这个内存上写一个唯一的块。@RamyAlZuhouri,在这种情况下你可以做a=malloc(n*n*sizeof(int))
。你的实际输出是什么?如果,例如“分段错误”,这是你应该告诉我们的。
for (i=0;i<n;i++)
for (j=0;j<n;j++)
a[i][j]=-1;
a=(int **)malloc(n*sizeof(int));
a=malloc(n*sizeof(int *));