2016-04-22 16 views
9

は、なぜ私はこれを行うことはできません。定数配列を引数として渡せないのはなぜですか? Cで

arrayfn({1.0, 2.0, 3.0}); 

arrayfn場合はどちらか、タイプdouble[]またはdouble*の一つのパラメータに取り、いくつかの機能です。これを試してみると、構文エラーです。

コンパイル時に知られている配列を生成して直ちに渡すような、C言語で何かを達成する方法がありますか?事前宣言してコードの行を費やす必要はありませんか?

+5

複合リテラルを使用できます。 –

+1

良い答え。それを試してみました;できます;私たちはここで終わった –

+3

あなたは答えを受け入れるまで、私たちはやっていません。 – Almo

答えて

9

短い回答:compound literalを使用する必要があります。何かのように

arrayfn((double[]) {1.0, 2.0, 3.0}); 

ジョブを行う必要があります。 、複合リテラルの構文なし{1.0, 2.0, 3.0}はブレース囲まれた初期化子リストであるため、


いくつかの説明の部分に来る

、なぜarrayfn({1.0, 2.0, 3.0});は、動作しませんでした。関数の引数として使用できる "オブジェクト"を意味するものではありません。あなたが考えているかもしれないが、ではなく、"定数配列"です。

C11、章§6.5.2.5、 複合リテラル

初期化子の中括弧で囲まれた リストであるが続く括弧で囲んだ形名で構成後置式を引用し、いくつかのより多くの情報を追加するには複合リテラルそれは初期化子リストによって値が与えられる無名のオブジェクトを提供します。

+0

ありがとう!できます。ちょっと変わって、私の即時の衝動は '(double *){1.0、2.0、3.0}'を実行することでした。 –

+2

'const double []' – user3528438

関連する問題