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

时间:2016-04-22 15:14:52

标签: c arguments parameter-passing compound-literals

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

arrayfn({1.0, 2.0, 3.0});

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

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

1 个答案:

答案 0 :(得分:10)

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

这样的东西
 arrayfn( (double[]) {1.0, 2.0, 3.0} );

应该做的。

一些解释

来到部分,为什么arrayfn({1.0, 2.0, 3.0});不起作用,因为如果没有复合文字的语法,{1.0, 2.0, 3.0}是一个括号括起初始化列表。它不表示可以用作函数参数的“对象”。正如您所想的那样,它们 “常量数组”

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

  

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