どのように配列が渡されていますか?
-
23-09-2019 - |
質問
は、refまたは値で、デフォルトで渡される配列はありますか? おかげます。
解決
彼らはポインタとして渡されます。配列のサイズに関するすべての情報が失われている。この手段。あなたはより良い助言使用STDになります::あなたが選択したとして、値または参照で渡すことができますベクトルと、それはそれゆえすべての情報を保持ます。
ここで関数に配列を渡すの一例です。 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]);
希望このことができます。
アレイは、特別である:彼らは常に配列の最初の要素へのポインタとして渡される
。所属していません StackOverflow