在 C 中,为什么我不能这样做:
arrayfn({1.0, 2.0, 3.0});
ifarrayfn
是一些函数,它接受一个类型的参数double[]
or double*
,无论哪个。尝试这样做会给我一个语法错误。
有没有一种方法可以让我在 C 中实现这样的目标——生成并立即传递一个在编译时已知的数组——从而避免花费一行代码预先声明和填充它?
在 C 中,为什么我不能这样做:
arrayfn({1.0, 2.0, 3.0});
ifarrayfn
是一些函数,它接受一个类型的参数double[]
or double*
,无论哪个。尝试这样做会给我一个语法错误。
有没有一种方法可以让我在 C 中实现这样的目标——生成并立即传递一个在编译时已知的数组——从而避免花费一行代码预先声明和填充它?
简短回答:您需要使用复合文字。就像是
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 章,复合文字
由带括号的类型名称后跟用大括号括起来的初始化器列表组成的后缀表达式是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。