簡體   English   中英

多維數組分配

[英]Multi-dimensional Array 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);
     }

很多事情都是錯的。

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. 動態分配

這不是動態分配二維數組的方法。

這里有很多錯誤,但至於分配,您應該這樣做:

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的回報......

首先更正for循環中的錯誤。 語法錯誤。 檢查變量拼寫。

現在是分配部分。 您只為代碼中的一維數組分配了內存。 分配二維數組要遵循以下過程。

首先我們需要分配一個指針數組。 而數組的大小就是行數。 然后我們為二維數組的每一行分配內存。 我們將每一行的地址(本質上是一個一維數組,因此是一個指針)分配給我們已經分配的指針。

因此,我們最初需要一個指向指針數組的指針。 對於這個數組中每個指向指針的指針,我們分配一個與二維數組中的行相對應的數組。

你可以做如下。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM