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

Why can't I pass constant arrays as arguments?

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

arrayfn({1.0, 2.0, 3.0});

if arrayfn 是某个函数,它接受一个类型为 double[]double* 的参数,以两者为准。尝试这个给我一个语法错误。

有没有一种方法可以让我在 C 中实现这样的功能 - 生成并立即传递一个在编译时已知的数组 - 避免花费一行代码预先声明和填充它?

简答: 您需要使用 compound literal。像

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

应该完成这项工作。


一些解释

说到这部分,为什么 arrayfn({1.0, 2.0, 3.0}); 不起作用,因为如果没有复合文字的语法,{1.0, 2.0, 3.0} 是一个大括号括起来的初始化列表。它不表示可以用作函数参数的 "object" 。他们是不是"constant arrays",正如你所想的那样。

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

A postfix expression that consists of a parenthesized type name followed by a brace-enclosed list of initializers is a compound literal. It provides an unnamed object whose value is given by the initializer list.