为啥我不能将常量数组作为参数传递?
Posted
技术标签:
【中文标题】为啥我不能将常量数组作为参数传递?【英文标题】:Why can't I pass constant arrays as arguments?为什么我不能将常量数组作为参数传递? 【发布时间】:2016-08-16 07:17:42 【问题描述】:在 C 中,为什么我不能这样做:
arrayfn(1.0, 2.0, 3.0);
如果arrayfn
是某个函数,它接受double[]
或double*
类型的一个参数,无论哪个。尝试这样做会给我一个语法错误。
有没有一种方法可以让我在 C 中实现这样的目标 - 生成并立即传递一个在编译时已知的数组 - 从而避免花费一行代码预先声明和填充它?
【问题讨论】:
您可以使用复合文字。 好答案;试过了;有用;我们到此结束 在您接受答案之前,我们还没有完成。 【参考方案1】:简答:您需要使用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 章,复合文字
一个后缀表达式,由一个带括号的类型名称后跟一个大括号括起来的 初始化器列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。
【讨论】:
谢谢!有用。有点奇怪,我的直接冲动是运行(double*)1.0, 2.0, 3.0
,它没有做我想要做的事情 - 但足够接近!
@user3528438:const
是可选的;复合文字不是常量数组,除非您希望它是一个。可以完全合法地被调用函数中的代码修改。以上是关于为啥我不能将常量数组作为参数传递?的主要内容,如果未能解决你的问题,请参考以下文章