22

配列はデフォルトで参照または値によって渡されますか? ありがとう。

4

3 に答える 3

30

それらはポインターとして渡されます。これは、配列サイズに関するすべての情報が失われることを意味します。std::vectors を使用することをお勧めします。これは、選択した値または参照によって渡すことができるため、すべての情報が保持されます。

関数に配列を渡す例を次に示します。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 );
}
于 2010-04-01T11:07:28.573 に答える
27

まず、配列のコピーが作成されるという意味で、配列を値で渡すことはできません。その機能が必要な場合は、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]);

お役に立てれば。

于 2010-04-01T13:01:46.793 に答える
6

配列は特殊です。配列は常に、配列の最初の要素へのポインターとして渡されます。

于 2010-04-01T11:10:00.880 に答える