为什么我不能将常量数组作为参数传递?
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.
在 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.