如果你有C99或C11编译器可用的,那么就可以在阵列参数之前传递数组作为参数的这两个方面,如图ThoAppelsin的answer。
如果您遇到了C89编译器,那么您必须更加努力地努力—。到目前为止,最简单的解决方案是使标题中的#define
尺寸可用;那么你可以这样写:
int function(grid[HEIGHT][WIDTH]) { ... }
int function(grid[][WIDTH]) { ... }
如果你不能做到这一点,那么你就必须考虑修改在函数的代码或main.c
的数据结构。
修改功能是指:
int function(int height, int width, int *grid)
{
int i, j;
for (i = 0; i < height; i++)
for (j = 0; j < width; j++)
grid[i*width + j] = 0;
return j;
}
这需要一个普通的指针-TO-int
并执行指数计算明确,而不是简单地写两个标。你的主要代码可能有:
int grid[HEIGHT][WIDTH];
i = function(HEIGHT, WIDTH, &grid[0][0]);
另一种方法就是创建一个二级结构,一组指针的指针,在main()
:
int grid_rows[HEIGHT];
for (i = 0; i < HEIGHT; i++)
grid_row[i] = grid[i];
i = function(HEIGHT, WIDTH, grid_rows);
现在的定义是:
int function(int height, int width, int **grid)
{
int i, j;
for (i = 0; i < height; i++)
for (j = 0; j < width; j++)
grid[i][j] = 0;
return j;
}
这会以额外存储和初始化为代价恢复函数中的符号便利性。
Here:http://stackoverflow.com/questions/8767166/passing-2d-array-to-function –