问题描述
假设我从某处获取输入并将其存储在一个变量中。假设变量是 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
将指向一个可能需要 10 int
秒的内存块。
用法:
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
。
{NewClass(1,2),NewClass(3,4)}
为 int (*p)[Cols] = malloc( sizeof *p * Rows );
x Rows
数组分配足够的空间,并将该数组的地址分配给 Cols
。然后您可以使用 int
访问每个元素。
释放所有你需要的是
p