如何在 C 中动态分配 int (*p)[n] 形式的指针?



假设我从某个地方获取输入并将其存储在变量中。假设变量是 Cols。

我想在形式上制作一个数组

int (*p)[Cols]

现在,我知道你不能这样做。那么我将如何动态分配它来做到这一点呢?

教我如何做到这一点将不胜感激!

你绝对可以使用int (*p)[Cols],它是一个指向大小Cols数组的指针(Cols倍大小的int倍,以字节为单位),你只需要为它分配内存,直到你这样做,它不会指向有效的内存位置。约束是分配的内存需要以Cols的倍数块为单位:

int (*p)[Cols] = malloc(sizeof *p); //prefered

int (*p)[Cols] = malloc(sizeof(int) * Cols); //alternative

在上述两个表达式中,假设Cols的值为 10,p将指向一个可能需要 10int秒的内存块。

用法:

for (int i = 0; i < Cols; i++)
{
p[0][i] = i;
}

上面的表达式只为一int分配了空间,但由于p是指向数组的指针,因此您可以根据需要为任意数量的表达式分配空间(给定内存限制)。

假设你想要一个包含 5 行和Cols列的数组:

int (*p)[Cols] = malloc(sizeof *p * 5);

用法:

for (int i = 0; i < 5; i++)
{
for (int j = 0; j < Cols; j++)
{
p[i][j] = i * j;
}
}

正如您(可能)知道这种结构主要用于模拟 2D 数组,其中一个优点是您可以使用单个可用释放所有内存:

free(p);

而像指针数组这样的构造,或者指针到指针的指针会强制你有多个free

int (*p)[Cols] = malloc( sizeof *p * Rows );

RowsxColsint数组分配足够的空间,并将该数组的地址分配给p。 然后,您可以p[i][j]访问每个元素。

要解除分配,您所需要的只是

free( p );

相关内容

  • 没有找到相关文章

最新更新