c - 如何在 ANSI C 中动态分配 POINTERS 的二维数组?

标签 c arrays pointers 2d

我遇到一个情况,我想要一个指针数组(M行,N列),该数组的每个成员都指向一个浮点 vector (L-长度)。你能告诉我如何建立它吗?我希望我可以动态地建立它,因为我通常一开始不知道M、N和L,并且L对于差异 vector 可能是不同的。

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

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

最佳答案

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

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]);

Size1Size2 是第一个数组和第二个数组的大小。

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

关于c - 如何在 ANSI C 中动态分配 POINTERS 的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631900/

相关文章:

将txt文件转换为邻接表

java - 处理 Java Socket 中的一个或多个单词 .readLine()

arrays - Matlab - 两条线的距离

c#如何在列表框中找到最小值和最大值

C++程序崩溃

c - C语言中如何求1到100万的和?

c - 头文件中的全局结构

c - 无需在地址后写端口即可访问服务器

c++ - Valgrind 在通过指向结构的指针访问结构成员时提示无效读取

c++ - 如何在 C++ 中删除这个二维动态数组