【问题标题】: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 中实现这样的目标 - 生成并立即传递一个在编译时已知的数组 - 从而避免花费一行代码预先声明和填充它?

【问题讨论】:

  • 您可以使用复合文字。
  • 好答案;试过了;有用;我们到此结束
  • 在您接受答案之前,我们还没有完成。

标签: c arguments parameter-passing compound-literals


【解决方案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 是可选的;复合文字不是常量数组,除非您希望它是一个。可以完全合法地被调用函数中的代码修改。
猜你喜欢
  • 2011-10-27
  • 2017-08-31
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多