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

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

Linda Hamilton
リリース: 2024-11-13 12:26:02
オリジナル
262 人が閲覧しました

When Should I Use References vs. Pointers in C  ?

C での参照による受け渡しとポインターによる受け渡し

C では、参照とポインターをいつ使用するかを理解することが混乱を招く可能性があります。この記事では、参照による受け渡しとポインターによる受け渡しの微妙な違いについて説明し、実用的なガイドラインを提供します。

参照による受け渡し:

次のような場合には参照による受け渡しが推奨されます。

  • 渡された変数の実際の値を変更します。
  • 複合体を渡します

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

ポインターによる受け渡しは、次の場合に必要です。

  • 一時オブジェクトを参照によって渡すことはできません (参照は既存のオブジェクトにバインドする必要があるため)
  • null ポインターを渡す必要があります。
  • ターゲットではなくポインター自体を変更する必要があります (たとえば、ポインターに新しい値を割り当てる)。

ベスト プラクティス:

原則として、パスすることを優先します。可能な限り参照してください。ただし、リテラル、null ポインター、またはポインター自体を変更する必要がある状況を扱う場合は、ポインターで渡します。

例:

提供されるコード スニペットはパスを渡します。マップに動的に割り当てられたベクトルへのポインタ。新しいベクトルを作成し、それをマップへの参照によって渡す必要があるため、これは有効なアプローチです。ポインタを使用することで、ベクトル全体をコピーする必要がなくなります。

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <tr1/memory>
#include <algorithm>
using namespace std;
using namespace std::tr1;

int main(){
        map<string, shared_ptr<vector<string>>> adjacencyMap;
        vector<string>* myFriends = new vector<string>();
        myFriends->push_back(string("a"));
        myFriends->push_back(string("v"));
        myFriends->push_back(string("g"));
        adjacencyMap["s"] = shared_ptr<vector<string>>(myFriends);
        return 0;
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート