如何在ANSI C中动态分配POINTERS的2D数组?

时间:2017-06-19 13:27:33

标签: c arrays pointers 2d

我遇到一个我希望有一个指针数组(M行,N列)的情况,这个数组的每个成员都指向一个浮点向量(L长度)。你能告诉我如何建立吗?我希望我可以动态建立它,因为我通常不知道M,N和L,而L可能与差矢量不同。

我的场合是我需要读取不同距离(NDIS)和深度(NDP)的格林函数。所以我需要创建类似* grn [NDP] [NDIS]的东西。然后使用此数组的每个指针指向绿色函数的组件。

顺便说一句,我认为它比设置一个已知大小的指针数组有点复杂。您认为使用这种类型的数据结构是否值得?我正在尝试编写一个程序来处理观察,我通常不知道它的大小。 但是,我可以使用大小固定的指针数组。如果总数据大于给定大小,我可以忽略超大部分。但我希望能全部使用它们。

1 个答案:

答案 0 :(得分:0)

您需要使用二维数组并需要动态分配它,如下所示:

int i, j;
float **arr;
arr = malloc(sizeof(float*) * Size1);    //1st array setup
for(i = 0; i < Size1; i++)
  arr[i] = malloc(sizeof(float*) * Size2); // 2nd array setup at each element of 1st array

现在像这样访问它:

for(i = 0; i < Size1; i++)
  for(j = 0; j < Size2; j++)
    printf("%f", arr[i][j]);

Size1&amp; Size2是第一个数组和第二个数组的大小。

您可以在第一个数组元素中设置不同大小的单个数组,因为您需要在没有循环的情况下更改Size2变量。 希望这会有所帮助。