静的に割り当てられた配列を参照渡しする方法は?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
(&myArray)[100]
は何らかの意味を持つのですか、それとも参照によって配列を渡すための単なる構文ですか?ここでは、大括弧が後に続くかっこを区別しません。ありがとう。
これは配列参照の構文です。(無効な)参照の配列(&array)
ではなくint & array[100];
を使用して、配列への参照が必要であることを明確にする必要があります。
編集:いくつかの説明。
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);
これら3つは同じ関数を宣言する異なる方法です。それらはすべてint *
パラメータを取るものとして扱われます、あなたはそれらに任意のサイズの配列を渡すことができます。
void foo(int (&x)[100]);
これは100個の整数の配列だけを受け付けます。 sizeof
でx
を安全に使用できます
void foo(int & x[100]); // error
これは「参照の配列」として解析されます - これは合法ではありません。
それはちょうど必要な構文です:
void Func(int (&myArray)[100])
^ 100個のint
の配列を参照で渡し、パラメータ名はmyArray
です。
void Func(int* myArray)
^配列を渡します。配列はポインタに崩壊します。したがって、あなたはサイズ情報を失います。
void Func(int (*myFunc)(double))
^関数ポインタを渡します。この関数はint
を返し、double
を取ります。パラメータ名はmyFunc
です。
それは構文です。関数の引数では、&myArray
を囲むint (&myArray)[100]
括弧が必要です。使用しない場合はarray of references
を渡すことになります。これはsubscript operator []
が& operator
よりも優先順位が高いためです。
例えば。 int &myArray[100] // array of references
そのため、type construction ()
を使用することによって、100個の整数の配列への参照が必要であることをコンパイラに伝えます。
例int (&myArray)[100] // reference of an array of 100 ints
配列はデフォルトでポインタによって渡されます。理解を深めるために、関数呼び出し内で配列を変更してみることができます。