[英]Allocating 2D array dynamically
我的任務是根據A和B中包含n個元素的值制作2dn二維數組。
我發現了這種為2D數組分配內存的方法,它可以工作,但是我不知道它是否正確或為什么正確
int **tab2D(int A[],int B[],int n)
{
int **newTab = malloc(n*sizeof(int*));
newTab[0] = A;
newTab[1] = B;
return newTab;
}
我知道還有其他方法可以做到這一點,但我對此感到很好奇。
據我了解您的代碼,它應該像這樣工作。
int **tab2D(int A[],int B[],int n)
可以看作是
int **tab2D(int *A,int *B, int n)
因此,您將指針傳遞給已經分配的兩個數組。 然后,您為指針到指針分配一些內存
int **newTab = malloc(n*sizeof(int*));
我認為應該是
int **newTab = malloc(2*sizeof(int*));
相反,因為您擁有A
和B
,它們的長度均為n
,所以我假設。 然后,取消引用新的指向指針的指針,並將指針分配給數組
newTab[0] = A;
newTab[1] = B;
可以寫成
*newTab = A;
*(newTab + 1) = B;
這不是int
的2D數組,而是一個指向int
的指針的數組。
之所以有效,是因為數組的每個元素都指向一個包含int
數組的地址
使用堆棧的類似代碼,只是為了說明其工作原理:
int a[] = {1, 2};
int b[] = {3, 4};
int *arr[] = {a, b};
真正的2D數組應該可以在連續區域中工作(沒有碎片),您可以使用指向VLA的指針來實現此目的:
int rows, cols;
scanf("%d %d", &rows, &cols);
int (*arr)[cols] = malloc(sizeof(int [rows][cols]));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.