我几乎是C的初学者,我想分配一个二维数组,更改它,重新分配它并打印它。 代码的两个答案都很有用。现在代码是:
main()
{
int i, j, L , **lp ;
scanf("%i" , &L );
lp = calloc(L , sizeof(*lp) );
for(i=0 ; i<L ; i++)
lp[i] = calloc( L , sizeof( *(lp[i])) );
for(i=0 ; i<L ; i++)
{
for(j=0 ; j<L ; j++ )
{
lp[i][j]=0;
printf("%i\t" , lp[i][j] );
}
printf("\n");
}
free( lp );
return(0);
}
答案 0 :(得分:1)
很多的事情是错误的。
{ for(j=0 , j<0 , j++ )
for (initialization_expression;loop_condition;increment_expression){..}
如果缺少任何一个,请将它们留空,但是需要分号。
即便如此,j=0;j<0
也没有任何意义。
你在第二个for循环中错误地将lp作为pl。
您没有为主要指定退货类型。这是没有报道,但是旧式,不应再使用了。
这不是动态分配二维数组的方法。
答案 1 :(得分:1)
这里有很多错误,但至于分配你应该这样做:
int main()
{
int i = 0;
int j = 0;
int L = 0;
int **lp = NULL;
scanf("%i", &L);
if (!(lp = calloc(L, sizeof(*lp)))) //allocate 1st dimension
return (0);
for (i = 0; i < L; i++)
{
lp[i] = calloc(L, sizeof(*(lp[i]))); //all 2nd dimensions
}
return (0);
}
不要施放malloc的返回......
答案 2 :(得分:0)
首先纠正for循环中的错误。语法错误。检查变量拼写。
现在为分配部分。您只为代码中的单维数组分配了内存。按照以下步骤分配二维数组。
首先我们需要分配一个指针数组。并且数组的大小是行数。然后我们为2D数组的每一行分配内存。并且我们将每行的地址(实际上是一维数组,因此指针)分配给我们已经分配的指针。
因此我们最初需要一个指向指针数组的指针。对于指向此数组中指针的每个指针,我们分配一个与2D数组中的行对应的数组。
您可以这样做。
int **a;
int size,x;
//--- Obtain size of array in size;
a = calloc(size,sizeof(int *)); //Allocating a row of pointers and assigning to **a
//for each *a in *a[] (i.e **a), we assign an array of ints.
for(x = 0; x < size; x ++)
{
a[x] = calloc(size,sizeof(int));
}
现在您可以像这样访问此数组:
for(i=0;i<size;i++)
for(j=0;j<size;j++)
{
//do something with a[i][j]
}