多维数组分配

时间:2012-11-09 08:01:15

标签: c arrays allocation

我几乎是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);
     }

3 个答案:

答案 0 :(得分:1)

很多的事情是错误的。

1。 for循环

{   for(j=0 , j<0 , j++ )


for (initialization_expression;loop_condition;increment_expression){..}

如果缺少任何一个,请将它们留空,但是需要分号。

即便如此,j=0;j<0也没有任何意义。

2。拼错

你在第二个for循环中错误地将lp作为pl。

3。主

您没有为主要指定退货类型。这是没有报道,但是旧式,不应再使用了。

4。动态分配

这不是动态分配二维数组的方法。

答案 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]
  }