[英]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);
}
很多事情都是錯的。
{ for(j=0 , j<0 , j++ )
for (initialization_expression;loop_condition;increment_expression){..}
如果缺少其中任何一個,請將它們留空,但您確實需要分號。
即使這樣j=0;j<0
作為條件也沒有意義。
您在第二個 for 循環中將 lp 拼錯為 pl。
您沒有為main指定返回類型。 這沒有被報告,而是舊式的,不應再使用。
這不是動態分配二維數組的方法。
這里有很多錯誤,但至於分配,您應該這樣做:
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.