ホームページ  >  記事  >  バックエンド開発  >  C で参照とポインタを使用する必要があるのはどのような場合ですか?

C で参照とポインタを使用する必要があるのはどのような場合ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-20 14:45:17452ブラウズ

When Should You Use References vs. Pointers in C  ?

C における参照およびポインターによる受け渡しについて理解する

C では、関数のスコープ外で実際の値を変更する場合、参照またはポインターによって関数に引数を渡すのが一般的です。 。ただし、どちらをいつ使用するかを理解すると、混乱する可能性があります。

参照による受け渡し

参照による受け渡しを使用すると、元の変数に直接アクセスして変更できます。これは次の場合に役立ちます。

  • 不必要なコピーを避けるための大きなオブジェクト (文字列、ベクトルなど) の変更。
  • 両方の関数が同じ変数を使用する場合の in-out 引数の受け渡し。

ポインターによる受け渡し

ポインターによる受け渡しは、ポインターを介して変数に間接的にアクセスします。これは次の場合に必要です。

  • ポインタを操作する必要がある (新しいオブジェクトへの再割り当てなど)。
  • 参照には許可されていない null 値を渡す。
  • 元の変数の変更を防止します (const ポインターを渡します)。

グッド プラクティス

一般的なガイドラインとして、次の使用をお勧めします。

  • 元の変数を変更したい。
  • 渡す null 以外の値がある。
  • 元の変数が過度に大きくない。

次の場合にポインターを使用します。

  • 変数のアドレスを操作する必要がある。
  • null 許容値がある。
  • 元の変数の変更を防ぎたい。

次のスニペットは、参照を使用してラージ オブジェクトを渡す一般的なシナリオを示しています。

void foo(std::string& s) {
  s += "suffix";
}

この場合、関数が新しい文字列オブジェクトを作成する必要がある場合は、ポインタによる受け渡しが適しています。

void foo(std::string* s) {
  *s = "new string";  // Deallocates the old string
}

まれに、値による受け渡しも適切な場合があります。小さな不変オブジェクト (プリミティブ型など) をコピーする場合と同様に、問題になりません。

以上がC で参照とポインタを使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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