タイトルを参照してください。それが私が尋ねなければならないすべてです。ネットには、この質問に対する簡潔な答えはあまりありません。スタックとヒープを覚えておいてください。完全な初心者と同じように説明します。「方法」ではなく「理由」を探すだけです。
編集 ポインタはスタックから大きなオブジェクトを取得する方法ですか?
タイトルを参照してください。それが私が尋ねなければならないすべてです。ネットには、この質問に対する簡潔な答えはあまりありません。スタックとヒープを覚えておいてください。完全な初心者と同じように説明します。「方法」ではなく「理由」を探すだけです。
編集 ポインタはスタックから大きなオブジェクトを取得する方法ですか?
プログラムのある部分から別の部分に巨大なオブジェクトを渡して、たとえばクラス全体のように処理する場合、または画像やビデオのように大量のデータを含むものを渡す場合、データのすべてのビットを渡すのは非常に非効率的です。代わりに、プログラムの受信部分が作業対象のオブジェクトに到達するために使用できる小さなメモリアドレス(ポインタ)を渡すことができます。
その巨大な側面は別として、それらは多くの柔軟性を提供しますが、私はそのための段落以上のものが必要です。
C#やJavaのようなマネージコードに入ると、すべてがポインター/参照で行われますが、それはすべて舞台裏であり、C++や他の同様の言語のようにそれらを処理する必要はありません。しかし、それらがどのように機能するかを理解することは依然として重要です。
以下に応じて編集します。
「大きなオブジェクトを処理する必要がないのに、なぜそれを渡すのですか?」
あなたはそうしません。でも; 私があなたの質問から外れている場合は訂正してください。しかし、コンピュータサイエンスを続ければ、プログラムの一部は可能な限り単純にする必要があり、1つのことだけを実行する必要があるということを学びます。一般に単一責任の原則として知られているこれは、プログラムの多くの一見小さな部分があり、それらがすべて連携して包括的な目標を達成することを示しています。つまり、これらの小さな部分の多くは、同じオブジェクト、同じデータで作業し、同じツールを使用して作業を完了する必要があります。架空のものを見てみましょう。
単純な画像編集アプリケーションをコーディングしています。トリミングツール、ペイントブラシツール、選択ツール、およびサイズ変更ツールが必要になります。これらの各ツールは、プログラム内で独自の場所(1つのクラス、または連携して動作する可能性が高い多くのクラス)を必要とし、そのクラスには、そのクラス。これらのクラスとメソッドのすべてが、画像データを確認または変更する必要がある可能性があります。ポインタを使用すると、画像のコピー全体を作成する代わりに、メモリアドレスを提供できます。そうすれば、クラスまたはメソッドの1つがそれに変更を加えたときに、これらすべてのコピーを管理し、それらがすべて同じ変更を取得することを確認することを心配する必要はありません。
参照渡し/共有データ構造を実行できます。これには、コピーを作成しないことでメモリとCPUのオーバーヘッドを節約することと、共有データに変更を加えることで複雑な通信パターンを提供することの2つの大きな機能があります。