为什么我不能将常量数组作为参数传递?

在C中,为什么我不能这样做:

arrayfn({1.0, 2.0, 3.0}); 

如果arrayfn是一个函数,它接受double[]double*类型的一个参数,无论哪个。 试试这个给我一个语法错误。

有没有一种方法可以在C中实现这样的东西 – 生成并立即传递一个在编译时已知的数组 – 避免不得不花费一行代码预先声明并填​​充它?

简短的回答:你需要使用复合文字 。 就像是

  arrayfn( (double[]) {1.0, 2.0, 3.0} ); 

应该做的工作。


一些解释

来到这个部分,为什么是arrayfn({1.0, 2.0, 3.0}); 没有工作,因为没有复合文字的语法, {1.0, 2.0, 3.0}是一个括号括起初始化列表。 它不表示可以用作函数参数的“对象”。 你可能已经想到它们不是 “恒定arrays”

要添加更多信息,请引用C11 ,章节§6.5.2.5, 复合文字

后缀表达式由带括号的类型名称后跟括号括起的初始值设定项列表组成,是一个复合文字。 它提供了一个未命名的对象,其值由初始化列表给出。