ホームページ  >  記事  >  バックエンド開発  >  C++ 関数が配列を返す場合の違いは何ですか?

C++ 関数が配列を返す場合の違いは何ですか?

PHPz
PHPzオリジナル
2024-04-19 21:06:02625ブラウズ

C 関数には、配列を返すときに 2 つの動作があります。コピーは値によって返され、コピーへの変更は元の配列には影響しません。元の配列への参照は参照によって返され、返された配列への変更は影響を受けません。元の配列に直接反映されます。

C++ 函数返回数组时有什么区别?

#C 関数が配列を返す場合の違い

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。