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

Bil*_*ith 10 c arguments parameter-passing compound-literals

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

arrayfn({1.0, 2.0, 3.0});
Run Code Online (Sandbox Code Playgroud)

if arrayfn是某个函数接受一个类型的参数double[]或者double*哪个.试试这个给我一个语法错误.

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

Sou*_*osh 10

简短回答:您需要使用复合文字.就像是

 arrayfn( (double[]) {1.0, 2.0, 3.0} );
Run Code Online (Sandbox Code Playgroud)

应该做的工作.


一些解释

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

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

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

  • `const double []` (2认同)