配列はデフォルトで参照または値によって渡されますか? ありがとう。
30262 次
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 に答える