[英]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.