-2

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

3 回答 3

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.主要

您没有为main指定返回类型。这没有被报告,但它是旧式的,不应该再使用了。

4.动态分配

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

于 2012-11-09T08:02:43.453 回答
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 ......

于 2012-11-09T08:31:45.810 回答
0

首先纠正for循环中的错误。语法错误。检查变量拼写。

现在是分配部分。您只为代码中的一维数组分配了内存。分配二维数组应遵循以下过程。

首先我们需要分配一个指针数组。数组的大小是行数。然后我们为二维数组的每一行分配内存。我们将每一行的地址(本质上是一个一维数组,因此是一个指针)分配给我们已经分配的指针。

因此,我们最初需要一个指向指针数组的指针。对于指向该数组中指针的每个指针,我们分配一个数组,该数组对应于 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]
  }
于 2012-11-09T08:24:49.000 回答