そのため、ポインターは多くの人 (私を含む) が少し混乱するものです。それらがどのように機能するかは理解していますが、アプリケーションなどを作成しているときに、いつそれらを使用するのが最適かをどのように知ることができますか?
実際にそれらを使用するのが良い考えである場合の一般的なルール/ガイドラインのようなものはありますか? 私は彼らの概念を大部分理解しているように感じますが、どこかでポインターを使用する必要があるかどうか常に疑問に思っています...
ありがとうございました。
それらは C 言語の基本的な部分です。失礼ではありませんが、考慮すべき重要なことは、それらは避けるべきものではないということだと思います. それらは自由に使えるもう 1 つのツールであり、強力なツールです。
一般に、これらは大量のデータにアクセスする場合に使用されます (つまり、配列、大規模な構造、動的メモリ割り当てなど)。また、API (アプリケーション プログラミング インターフェイス) を設計する際にも非常に役立ちます。これは実際には C# の質問ではありません。C# と C++ では、値渡しまたは参照渡しが可能であり、値渡しまたは参照渡しの有用性に基づいて質問の性質が変化し、他の手段のユーザーも同様です。関数、クラスなどの外部データへのアクセス
値で渡すことができ、値が読み取り専用の場合は、値を変更する手段がないため、ポインターがなくても問題ありません。一般的なケースは、単純な合計関数です。
int sum (int a, int b) {
int value = a + b;
return value;
}
提供された値を変更する必要はなく、配列や複雑な構造ではなく、単純な値にのみアクセスしています。
ここで、大きな配列の内容を変更する場合、特に配列のサイズが実行時に変更される可能性がある場合 (つまり、リンクされたリストやその他のデータ構造)、ポインター、ピリオドが必要です。複数の値を変更する場合は、ポインターを使用するか、関数の戻り値 (つまり: int mysum = sum(1,2);
) を使用することができます。通常の作業でポインターを使用するときに遭遇する唯一の懸念は、各関数の開始時に NULL ポインター値の可能性があるかどうかを確認することです。本当の問題は、不十分に作成されたサード パーティの API またはライブラリから NULL 以外の無効な/破損したポインターを取得できる大規模なプロジェクトで作業する場合です。JTAG デバッガーや GDB などを使用したデバッグは、ここから始まります。
cの場合、最も些細なプログラムを除いて、ほとんどすべてのポインターを自然に使用することになると思います。構造体、配列 (文字列を含む) などの非基本型を参照する場合は、ポインターが必要になります。
他にもたくさんの場所があります:
まあ、いくつかの簡単なビットは、動的メモリ割り当ての場合、ポインターを使用することです。
使用するサイズがわからない場合はarrays
、リンク リストを実装することをお勧めします。
関数から複数の戻り値が必要な場合は、変更する変数のアドレスを渡すことをお勧めします。
100% 確信が持てない場所で、通常の変数を使用する必要がある場合は、ポインターを使用してください。