C 関数には、配列を返すときに 2 つの動作があります。コピーは値によって返され、コピーへの変更は元の配列には影響しません。元の配列への参照は参照によって返され、返された配列への変更は影響を受けません。元の配列に直接反映されます。
C では、関数は配列を含むさまざまなタイプのデータを返すことができます。関数が配列を返す場合、2 つの異なる動作があります:
値で配列を返す場合、関数は配列のコピーを作成し、呼び出し元に返します。これにより、メモリの新しいコピーが作成され、そのコピーに加えられた変更は元の配列には影響しません。
構文:
int* foo() { int arr[] = {1, 2, 3}; return arr; }
実際のケース:
int main() { int* arr = foo(); arr[0] = 10; // 更改副本值,不影响原始数组 return 0; }
配列を返すReference を使用すると、関数は元の配列への参照を直接返します。これはメモリの新しいコピーを作成しません。つまり、返された配列に加えられた変更は、元の配列に直接反映されます。
文法:
int* &bar() { static int arr[] = {1, 2, 3}; return arr; }
実際のケース:
int main() { int* &arr = bar(); arr[0] = 10; // 更改原始数组值 return 0; }
機能 | 値による戻り値 | 参照による戻り値 |
---|---|---|
返されるコピー | は次のとおりです。 | No |
返された配列への変更 | 元の配列には影響しません | 元の配列に直接反映されます |
メモリ オーバーヘッド | メモリ オーバーヘッドが高いためコピーを作成してください | メモリ オーバーヘッドが低いためコピーを作成しないでください |
効率 | 実行効率が低い | 実行効率が高い |
以上がC++ 関数が配列を返す場合の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。