我写这个来执行洪水填充,这里有两个问题:
1-i需要从用户那里获得length
,如何将未知长度的数组传递给函数?
2 - 我应该更改在函数内调用floodfill的参数吗?
#include <stdio.h>
int main() {
const int length = 9;
int board[length][length],sheet[length][length];
int i=1,j=1;
floodfill(board,sheet,i,j);
return 0;
}
void floodfill(int board[length][length],int sheet[length][length], int i,int j){
if(board[i][j]!=-1)
{
sheet[i][j]= 1;
if(i-1>0 && j>0)
floodfill(board, sheet, i-1,j);
if(i+1>0 && j>0)
floodfill(board, sheet, i+1,j);
if(i>0 && j+1>0)
floodfill(board, sheet, i,j+1);
if(i>0 && j-1>0)
floodfill(board, sheet, i,j-1);
}
}
答案 0 :(得分:0)
如何将未知长度的数组传递给函数?
如果您的编译器支持可变长度数组(VLA),这对于大多数现代编译器都是如此,因为C99标准需要它并且在当前(C11)标准中,它们是可选功能,可以这样传递:
void example(size_t rows, size_t cols, int array[][cols])
因此,在引用之前的参数时,首先传递维度,然后传递(指向)数组。请注意,您必须提供除第一个之外的所有维度。
当然,如果两个维度相同,您只需要一个参数,就像您的情况一样:
void example(size_t length, int array[][length])
如果您不能使用VLA,因为您的编译器确实缺乏支持,那么您最好的选择是使用 flat 数组(此处大小为rows * cols
)并计算索引。使用这样的函数:
void example(size_t rows, size_t cols, int *array)
您必须在主代码中动态分配数组,例如像这样:
int *array = malloc(rows * cols * sizeof *array);
然后您将手动访问元素,例如如果你想索引[i][j]
,你可以写:
array[i * cols + j]