8

整数配列を引数として受け取り、それを出力する関数があります。

void printArray(int arr[3])
{
   int i;
   for(i=0; i<3; ++i)
   {
      printf("\n%d", arr[i]);
   }
}

このように配列の値を渡す方法はありますか

printArray( {3, 4, 5} );

関数に渡すためだけに配列を作成する必要なく、事前に値を知っている場合はどうなりますか?

4

1 に答える 1

8

TL;DR関数は入力引数として配列 (へのポインター) を想定しているため、配列を渡す必要があります。配列なしでこれを呼び出す方法はありません。

とはいえ、 「追加の配列変数を作成せずに」と尋ねるつもりなら、それは確かに可能です。これは、複合リテラルと呼ばれるものを使用して実現できます。何かのようなもの:

 printArr( (int []){3, 4, 5} );

正常に動作するはずです。

引用するにはC11、章§6.5.2.5

[ In C99章 §6.5.2.5/p4 ]

括弧で囲まれた型名とそれに続く中括弧で囲まれた初期化子のリストで構成される後置式は、複合リテラルです。これは、初期化子リストによって値が指定される名前のないオブジェクトを提供します。

そうは言っても、同じではprintArr()ありprintArray()ませんが、それはスニペットの単なるタイプミスだと思います。

于 2016-09-19T10:00:29.980 に答える