传递布尔数组作为函数输入时初始化值太多

Too many initializer values while passing boolean array as function input

大家好。我正在研究这个生命游戏问题并尝试传递一个布尔数组:(给定)

game({0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);

进入以下函数:(给定)

void game(bool cells[], int size, int num_gen) 

但是,我收到此错误:初始化值过多 C/C++ (146)

我试过,并且能够通过在主函数中声明数组来传递值:

int main(void) 
{
    int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
}

但这是我的学校作业,所以我不应该编辑任何给定的 codes/inputs/functions。

我现在有点迷路了,希望能有任何意见。提前致谢!

您可以使用 compound literal 来实现。

类似

game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);

大括号中的值列表在表达式中无效。你需要的是一个复合文字:

game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);

在花括号段之前看起来像强制转换的语法为您提供了类型。您还可以将此语法用于 struct 文字。

void game(bool cells[], int size, int num_gen) 

你函数的第一个参数不是数组。当然,您将参数声明为未指定长度的数组,但这样的参数将被调整为指向该数组元素的指针。函数参数在 C++ 中永远不是数组。

因此,您正试图用 brace-enclosed 值列表初始化指针。值不止一个,所以是错误的(而且值的类型也与指针不兼容)。

您可以创建一个数组,并将指针传递给该数组的元素:

int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
game(cells, std::size(cells), 9);