私はc#のAddressOfとc ++のポインタで混乱していますか?Addressofが実行を管理し、ポインターが実行を管理しないか何か他のものであるというのは正しいですか?
2 に答える
AddressOfはVB演算子であり、C#には存在しません。プロシージャへのデリゲートを作成します。デリゲートを後で使用して、プロシージャの名前を含まないコードでプロシージャを呼び出すことができます。
C / C ++のポインタは、メモリ内のアドレスの表現です。関数へのポインターを作成し、それを使用してその関数を呼び出すことができるため、その特定の場合、ポインターとデリゲートは同様に動作します。ただし、デリゲートは単なる関数ポインタではありません。最も重要な違いは、デリゲートをチェーン化して、一度に複数のプロシージャを呼び出すことができることです。
MSDNのサンプルは、ほとんどのストーリーを示しています。
int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());
これにより、数値変数のアドレスがintpへのポインタに割り当てられます。
これにはいくつかの落とし穴があります。1。フェッチするアドレスを持つ変数を初期化する必要があります。デフォルトの値型では問題ありませんが、参照型では問題です。
.NETでは、変数はユーザーが気付かないうちにメモリ内を移動する可能性があります。変数のアドレスを処理する必要がある場合は、固定を使用して変数をRAMに固定する必要があります。
&は変数にのみ適用でき、定数や値には適用できません。(つまり、int * p =&GetSomeInt();のような構造を使用することはできません。)
繰り返しになりますが、コードは安全でないモードでコンパイルする必要があります。これにより、マネージコード「セーフティネット」以外の機能を使用するCLRにフラグが立てられます。