c - 堆分配一个二维数组(不是指针数组)

标签 c multidimensional-array malloc

我正在编写 C 代码,我想堆分配 512*256 字节。为了我自己的方便,我希望能够使用语法 array[a][b]; 访问元素。无需算术即可找到正确的索引。

我在网上看到的每个教程都告诉我创建一个指针数组,该数组指向我想要在数组中包含的行的数组。这意味着每个子数组需要单独进行 malloc 和 free 。我对一种只需要一次调用 malloc 和一次调用 free 的解决方案感兴趣。(因此所有元素都是连续的)我认为这是可能的,因为我不会构造一个锯齿状数组。

如果有人可以分享声明此类数组的语法,我将不胜感激。

最佳答案

好吧,如果你想分配类型的数组,你可以将它分配给该类型的指针。

由于 2D 数组是数组的数组(在您的例子中,是一个由 512 个 256 个字符的数组组成的数组),因此您应该将其分配给一个指向 256 个字符的数组的指针:

char (*arr)[256]=malloc(512*256);
//Now, you can, for example:
arr[500][200]=75;

(*arr 两边的括号是使其成为指向数组的指针,而不是指针数组)

关于c - 堆分配一个二维数组(不是指针数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37471027/

相关文章:

c - 如何遍历一个数组并在C中找到所有可达点?

c - 即使按值传递,多维数组值也会被修改

c - C 中字符串数组的动态分配

C - 重新分配错误 : corrupted size vs prev_size

c - fgets() 的行为、换行符及其在内存中的存储方式

c - 获取处理器的内存粒度

c - 使用 uint8_t 为双数组分配内存

c - 添加函数调用如何在链接时导致其他符号变得未定义?

c - malloc : Anonymous mapping and magic area

java - 我尝试在 2D 数组中找到总和最小的行,但只得到 0