配列はデフォルトでrefまたはvalueによって渡されますか?ありがとう。
それらはポインタとして渡されます。これは、配列サイズに関するすべての情報が失われることを意味します。 std :: vectorを使用することをお勧めします。これは、選択に応じて値または参照で渡すことができるため、すべての情報を保持します。
配列を関数に渡す例を次に示します。 sizeof(p)はポインタのサイズを与えるので、要素の数を具体的に指定する必要があることに注意してください。
int add( int * p, int n ) {
int total = 0;
for ( int i = 0; i < n; i++ ) {
total += p[i];
}
return total;
}
int main() {
int a[] = { 1, 7, 42 };
int n = add( a, 3 );
}
まず、配列のコピーが作成されるという意味で、値で配列を渡すことはできません。その機能が必要な場合は、std::vector
またはboost::array
を使用してください。
通常、最初の要素へのポインタは値によって渡されます。このプロセスでは配列のサイズが失われるため、個別に渡す必要があります。次の署名はすべて同等です。
void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size); // the 7 is ignored in this context!
参照渡しする場合、サイズは次のタイプの一部です。
void by_reference(int (&a)[7]); // only arrays of size 7 can be passed here!
多くの場合、参照渡しとテンプレートを組み合わせるため、静的に既知のさまざまなサイズで関数を使用できます。
template<size_t size>
void by_reference(int (&a)[size]);
お役に立てれば。
配列は特別です。配列の最初の要素へのポインタとして常に渡されます。