Csharp-unsafe-codes
C#-安全でないコード
C#では、 unsafe 修飾子でマークされている場合、コードブロックの関数でポインター変数を使用できます。 *アンセーフコード*またはアンマネージコードは、*ポインター*変数を使用するコードブロックです。
'__ 注意-この章で言及されているプログラム(https://www.finddevguides.com/compile_csharp_online.php[codingground])を実行するには、_Project >>コンパイルオプション>>コンパイルコマンド_でコンパイルオプションを設定してください
`+ mcs * .cs -out:main.exe -unsafe" + ` '__
ポインタ
- ポインタ*は、値が別の変数のアドレス、つまりメモリ位置の直接アドレスである変数です。 変数や定数と同様に、ポインターを宣言してから変数アドレスを保存する必要があります。
ポインタ宣言の一般的な形式は次のとおりです-
以下は、有効なポインター宣言です-
次の例は、安全でない修飾子を使用して、C#でのポインターの使用を示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
メソッド全体を安全でないと宣言する代わりに、コードの一部を安全でないと宣言することもできます。 次のセクションの例はこれを示しています。
ポインターを使用してデータ値を取得する
- ToString()*メソッドを使用して、ポインター変数によって参照されるロケートに格納されているデータを取得できます。 次の例はこれを示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
メソッドへのパラメーターとしてのポインターの受け渡し
パラメーターとしてメソッドにポインター変数を渡すことができます。 次の例はこれを示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ポインターを使用して配列要素にアクセスする
C#では、配列名と配列データと同じデータ型へのポインターは、同じ変数型ではありません。 たとえば、int* pとint [] pは同じ型ではありません。 ポインター変数pはメモリー内で固定されていないが、配列アドレスはメモリー内で固定されているため、インクリメントできません。
したがって、CまたはC ++で従来行っているように、ポインター変数を使用して配列データにアクセスする必要がある場合(リンク:/cprogramming/c_pointers [Cポインター]を確認してください)、* fixedを使用してポインターを修正する必要があります*キーワード。
次の例はこれを示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
安全でないコードのコンパイル
安全でないコードをコンパイルするには、コマンドラインコンパイラで /unsafe コマンドラインスイッチを指定する必要があります。
たとえば、安全でないコードを含むprog1.csという名前のプログラムをコマンドラインからコンパイルするには、コマンドを与えます-
Visual Studio IDEを使用している場合は、プロジェクトプロパティで安全でないコードの使用を有効にする必要があります。
これを行うには-
- ソリューションエクスプローラーでプロパティノードをダブルクリックして、*プロジェクトプロパティ*を開きます。
- [ビルド]タブをクリックします。
- オプション「安全でないコードを許可」を選択します。