【问题标题】:How to create a multidimensional array with variable length如何创建可变长度的多维数组
【发布时间】:2017-06-07 22:54:14
【问题描述】:

我想创建一个大小可变的矩阵(相同的高度和宽度),这意味着高度和宽度取决于一个变量。现在我知道如何使用 malloc/calloc 保留存储,但我不知道如何使用 malloc 创建二维数组。 还是有其他方法可以解决我的问题? 提前致谢!

【问题讨论】:

  • 请进行搜索。这在 Stackoverflow 和其他地方得到了多次回答。
  • 有两种典型的解决方案。第一个是分配一个连续的内存块,然后可以访问它,就好像它是一个带有仔细索引的二维矩阵一样。第二个是分配一个指向double *(又名double **)的指针,然后一一分配每一行。在这个网站上搜索几秒钟,我相信你会找到很多例子。
  • int (*m)[cols] = malloc( sizeof(int[rows][cols]) );

标签: c arrays multidimensional-array


【解决方案1】:

我不知道如何使用 malloc 创建二维数组。

// Example of a 2D array.  malloc() cannot create this.
int TwoD[height][width];

malloc() 可以为int、数组等分配内存for。它不能创建数组。 malloc() 的结果是一个指针。所以从一个指向二维数组的指针开始。

// C99, C11
int (*a)[height][width];

a分配内存

a = malloc(sizeof *a); 
assert(a); // Insure NULL was not retuned.

使用内存

(*a)[0][0] = 1;
(*a)[0][1] = 2;
// ... 
(*a)[height-1][width-1] = height*width;

完成后免费

free(a);

【讨论】:

  • 谢谢。现在我想我有一个不同的问题:在我基本上将矩阵复制到新分配的内存的 for 循环中,我得到我的计数器变量 j 必须具有“指向对象”类型的错误。我在网上搜索过,但找不到有用的答案。 for (i = 0; i for (j = 0; j *newgen[i][j ] = oldgen[i][j]; } }
  • @MrCGenius 您认为此答案的示例代码(*a)[0][0] 和您的代码*newgen[i][j] 有什么区别?
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多