【发布时间】:2019-01-25 07:56:00
【问题描述】:
我想创建一个函数,它的参数是我动态分配的二维数组,问题是我不知道如何构建我的函数。
这是我的主要内容(N_MAX 定义为 300):
int i;
int **Bord = NULL;
Bord = malloc(N_MAX * sizeof(*Bord));
if(Bord == NULL)
{
printf("Error while allocating memory to an array");
free(Bord);
return -1;
}
for(i = 0; i < N_MAX; i++)
{
printf("%d\n", i);
Bord[i] = malloc(N_MAX * sizeof(*(Bord[i])));
if(Bord[i] == NULL)
{
printf("Error while allocating memory to an array");
while(i != 0)
{
free(Bord[i]);
i--;
}
free(Bord);
return -1;
}
}
我试图用一个不是动态分配的数组做一些事情,但这真的很糟糕。当我想调试函数时,我的手表可以工作(我的数组中有正确的数字)但程序不工作(错误:一元'*'的无效类型参数(有'int'))
我已经在 Google 上进行了一些搜索,但我找不到具有“动态分配”和“通过引用”的主题,如果存在,请告诉我。
如何构建这个功能?
【问题讨论】:
-
你的新函数应该做什么?
-
如果是整数,您正在创建一个指向数组的指针数组;您没有创建 2D 数组,因为 2D 数组中的所有元素都是连续的。两者都可以使用两个下标访问,但底层数据却大不相同。
-
有点难解释,但数组中有一张图片,这张图片上有线条。该程序必须遵循这些路线。因此,该函数获取直线的一个坐标并查找该点周围的内容。最后返回下一点的坐标。
-
那么,如果它们不连续,我如何通过引用传递我的数组?有可能吗?
-
您可以将指针传递给指向函数的指针数组的开头;数组中的指针彼此连续。每个整数数组中的整数(在第二个循环中分配)是连续存储的;但是,不能保证
Bord[0]中的整数与Bord[1]中的整数是连续的。您需要将int **data传递给您的函数。然后,您可以使用双下标访问数组的元素:data[i][j]等。但是,汇编代码与使用int (*data)[N_MAX](指向数组的指针)使用的代码完全不同。
标签: c function multidimensional-array dynamic pass-by-reference