gpt4 book ai didi

c - 将数组传递给 C 中的递归函数

转载 作者:行者123 更新时间:2023-11-30 21:06:42 24 4
gpt4 key购买 nike

我写这个是为了执行洪水填充,这里有两个问题:1-我需要获取length从用户那里,我如何将未知长度的数组传递给函数?2-我应该更改函数内调用洪水填充的参数吗?

#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);
}
}

最佳答案

how can I pass an array with unknown length to a function?

如果您的编译器支持可变长度数组 (VLA),这对于大多数现代编译器都是如此,因为 C99 标准需要它,并且在当前 (C11) 标准中,它们是可选功能,您可以这样传递:

void example(size_t rows, size_t cols, int array[][cols])

因此,您首先传递维度,然后传递(指向数组的指针),同时引用前面的参数。请注意,您必须提供除第一个尺寸之外的所有尺寸。

当然,如果两个维度相同,您只需要一个参数,就像您的情况一样:

void example(size_t length, int array[][length])
<小时/>

如果由于编译器确实缺乏支持而无法使用 VLA,那么最好的选择是使用 平面 数组(此处的大小为 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]

关于c - 将数组传递给 C 中的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com