2番目の配列にいくつかの変更を加えた後、2つの配列があります。最初の配列を2番目の配列と同じにしたいの
ですが
、配列全体を1つの要素ごとにコピーするのではなく、
1つのコマンドで最初の配列が2番目の配列の要素を指すようにすることは可能ですか
。
1051 次
2 に答える
6
いいえ、配列はオブジェクトであり、オブジェクトはストレージの領域です。2 つのアレイは、ストレージの 2 つの別個の領域です。
ただし、配列の最初の要素へのポインターを指定すると、それを使用して、配列自体と同じように配列にインデックスを付けることができます。
int arr[] = {1, 2, 3, 4, 5};
int* p = arr;
arr[2] == p[2];
ただし、配列とポインターが似ているという誤解を助長したくはありません。最初の行は、5 つの を含む配列オブジェクトを定義しますint
。2 行目は、その配列の最初の要素を指すポインターを定義します。
最後の行で両方を同じように使用できる理由は、配列の名前 がarr
、インデックス付けを行う前に最初の要素へのポインターに暗黙的に変換されるためです。したがって、実際にはこれら 2 つの部分式は同じものです。arr[2]
インデックス演算子を適用する前に、ポインターへの暗黙的な変換を行うだけです。
または、配列への参照を取得できます。
int arr[] = {1, 2, 3, 4, 5};
int (&r)[5] = arr;
arr[2] == r[2];
現在r
は配列の単なるエイリアスです。arr
との両方がr
文字通り配列オブジェクトを参照します。
于 2013-02-16T16:39:35.673 に答える
-1
一度に 1 つの要素をコピーする場合は、単純なfor
ループで十分です。たとえば、使用できるすべての要素をコピーしたい場合(配列にPODタイプがある場合memcpy
のみ)。
それからもちろんありstd::copy
ます:
int array1[5] = { ... };
int array2[5];
// Copy from `array1` to `array2`
std::copy(std::begin(array1), std::end(array1), std::begin(array2));
于 2013-02-16T16:40:05.687 に答える