需要exexlanation的2D数组(+传递给函数)

时间:2015-12-28 11:52:29

标签: c arrays function pointers multidimensional-array

我有3个问题。

  • 有谁能解释如何使用指向指针的指针在C中创建2D数组?我知道如何“使用”它,但我从某个部分机械地进行而没有更深入的理解。
  • 在C中有三种创建2D数组的方法就是其中任何一种 喜欢?如果是,那么为什么?
  • 将数组传递给函数以便能够在函数外部使用相同数组的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

我总是喜欢使用双指针将2D数组传递给任何函数。 例如,如果我创建的函数说int** allocate(int** memptr, int row, int col),那么我将实现如下函数

int** allocate(int** memptr, int row, int col){
 int i; 
 memptr = (int**)malloc(sizeof(int*) * row); // for how many 1D array you need
 for(i = 0; i < row; i++)
   memptr[i] = (int*)malloc(sizeof(int) * col); // allocating memory for each 1D array
 return memptr;
}

我会像这样调用函数

int** memptr = NULL;
int row, col;
scanf("%d%d", &row, &col);
memptr = allocate(memptr, row, col);

还有其他几种方法可以做到这一点,但我最喜欢这个的原因是它是如此离散,代码本身说明了使用指针指向来分配内存的实际工作或过程。一旦你分配了你想存储多少指针并为memptr = (int**)malloc(sizeof(int*) * row);分配内存,你就迭代一个循环并再次为每个指针分配内存memptr[i] = (int*)malloc(sizeof(int) * col);

这是我亲眼见过和使用过的最佳方式。