簡體   English   中英

動態分配2D數組

[英]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*));

相反,因為您擁有AB ,它們的長度均為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.

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