在 C 中,为什么我不能这样做:
arrayfn({1.0, 2.0, 3.0});
if arrayfn
是一些接受一个类型参数的函数double[]
or double*
,以哪个为准。尝试这个会给我一个语法错误。
有没有一种方法可以在 C 中实现类似的功能 - 生成并立即传递编译时已知的数组 - 从而避免花费一行代码预先声明和填充它?
简短回答:你需要利用一个复合文字 https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html。就像是
arrayfn( (double[]) {1.0, 2.0, 3.0} );
应该做这项工作。
一些解释
来到这个部分,为什么arrayfn({1.0, 2.0, 3.0});
不起作用,因为没有复合文字的语法,{1.0, 2.0, 3.0}
是一个大括号括起来的初始值设定项列表。它并不表示可以用作函数参数的“对象”。他们是not “常量数组”,正如您可能已经想到的那样。
要添加更多信息,请引用C11
,第 §6.5.2.5 章,复合文字
由带括号的类型名称后跟大括号括起来的后缀表达式
初始值设定项列表是复合文字。它提供一个未命名的对象,其值由初始值设定项列表给出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)