客観的な言葉でポインタの実用化が見当たらないようです。私はc#とjavaを知っていて、ポインターを使用する必要はありません(それは私が思うことであり、c#とjavaによるdangouresコーディングとも見なされます)が、今はObjective-cを学び始めており、なぜあなたが常にしなければならないのか理解できませんオブジェクトインスタンスへのポインタを作成します。
4 に答える
Objective-C(Cの場合と同様)では、関数への引数は値で渡されます。関数で元のオブジェクトを変更する場合は、そのオブジェクトへのポインターを渡す必要があります。Javaとc#は参照によって引数を渡すため、ポインターは必要ありません。
ええと、c#では、明示的にではなく、実際にポインターを使用します。デリゲート、匿名型などを考えてみてください。これらの参照型の使用を効率的に管理していない場合、c#のガベージコレクションもヒットする可能性があります。
obj-cでは、再生面がもう少し露出しています。あなたが上で述べたように、メモリgpfなどの危険性に関して、アプローチには長所と同じくらい多くの短所があると思います。
ゆっくりゆっくり、キャッチーモンキー:)
ポインタが何であるかを実際に理解していますか?オブジェクトが格納されているメモリ空間への単なるアドレスであること。
したがって、ポインターを操作し、ポインターをパラメーターとして関数に渡す場合は、アドレスのみを渡し、オブジェクト全体は渡しません。オブジェクト全体をコピーする必要がないため、アドレスを介してオブジェクトの値にアクセスできるため、これははるかに高速です。
Javaもポインタを使用するので、自分でポインタについて心配する必要はありません。(これは、ポインタを使用したくない場合はかなり面倒な場合があります。)
編集
int nvar=2;
int* pvar=&nvar;
ここで、整数「nvar」の参照を取得すると、整数「pvar」へのポインターにそれを置くことができることがわかります。これがポインタと参照の間の接続です(C ++の場合、この場合)
ポインターで実行できることと参照で実行できないことの1つは、ポインターをインクリメントすることです。ポインタはアドレス(すでに述べたもの)であるため、その値を変更すると、配列内の次/前のオブジェクトを指すようになります。配列で次/前のインデックスを使用できるため、あまり便利ではありませんが、状況によっては、非常に高速なコードが生成される場合があります(ただし、汚れが多く、エラーが発生しやすくなります)。
あなたがそれらに慣れると、ポインタはとても楽しいです;)