ホームページ  >  記事  >  バックエンド開発  >  ## C : 引数を値で渡すのと参照で渡すのはどちらがよいでしょうか?

## C : 引数を値で渡すのと参照で渡すのはどちらがよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 21:44:02877ブラウズ

##  C  : When Should You Pass Arguments by Value vs. by Reference?

C : 引数の「値渡し」と「参照渡し」の違い

C では、パラメーターとそのパラメーターの間の相互作用引数はパラメータの型によって決まります。値の受け渡しは一般的ですが、特定のシナリオでは参照の受け渡しに明確な利点があります。

参照の受け渡しの背後にある理由

参照の受け渡しには、次の 2 つの主な目的があります。

  • 引数の値の変更: 参照パラメーターを使用すると、関数は引数の値を変更できます。対照的に、値パラメータは引数のコピーを作成し、変更を関数内で分離します。
  • パフォーマンスの向上: 参照渡しにより、オブジェクトを関数にコピーする必要がなくなります。特に大きなオブジェクトや複雑なオブジェクトのパフォーマンスが向上します。

例: 引数値の変更

次の関数を考えてみましょう:

<code class="cpp">void get5and6(int *f, int *s)
{
    *f = 5;
    *s = 6;
}</code>

ここでは、ポインタを使用して引数を参照渡しします。

<code class="cpp">int f = 0, s = 0;
get5and6(&f, &s);</code>

を指​​定して関数を呼び出すと、関数は参照が指す値を変更するため、f と s はそれぞれ 5 と 6 に設定されます。

または、参照を使用します。直接同じ結果が得られます:

<code class="cpp">void get5and6(int &f, int &s)
{
    f = 5;
    s = 6;
}</code>

次の関数を呼び出しても:

<code class="cpp">int f = 0, s = 0;
get5and6(f, s);</code>

同じ効果が得られます。

例: パフォーマンスの最適化

ゲームの状態を保存する関数を考えてみましょう。

<code class="cpp">void SaveGame(GameState& gameState)
{
    gameState.update();
    gameState.saveToFile("save.sav");
}</code>

参照を渡さないと、GameState オブジェクトのコピーが関数内に作成され、大量のリソースを消費する可能性があります。参照渡しでは、オブジェクトのアドレスのみがコピーされ、その大きな内容をコピーするオーバーヘッドが回避されます。

参照を使用する場合

参照の受け渡しは、次のような場合に有利です。 :

  • 渡されたオブジェクトは大きいか複雑です。
  • 関数は頻繁に呼び出されます (ループ内など)。

Const参照

Const 参照により、関数内で引数を変更できないようになります。これらは、特定のパラメータへの読み取り専用アクセスを強制するために使用されます。

以上が## C : 引数を値で渡すのと参照で渡すのはどちらがよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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