在C中,我为什么不能这样做:
arrayfn({1.0, 2.0, 3.0});
如果arrayfn
是某个函数,它接受一个double[]
或double*
类型的参数,以哪个为准。试试这个会给我一个语法错误。
有没有一种方法可以在C中实现这样的东西 - 生成并立即传递一个在编译时已知的数组 - 避免花费一行代码预先声明并填充它?
答案 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,复合文字
后缀表达式,由带括号的类型名称后跟括号括起来组成 初始化列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。