ポインタを使った値型の参照渡し
この記事はhttps://takymsystems.blog.fc2.com/blog-entry-62.htmlに転載しました。
前回は、ポインタを使ってメモリにアクセスできるので、暗黙的に型を別の型に変換できるのではないかと思いましたのでC#で試してみました。今回は、ポインタを使って値型の参照渡しをしてみたいと思います。
(※ポインタを使うには '/unsafe' でコンパイルする必要があります。)
Program.cs
using System; namespace MemoryTest { // ポインタにするためアンセーフにする。 static unsafe class Program { static void Main(string[] args) { // ポインタを使う変数。 Target tc = new Target(); tc.number = 0x12345678; // 変更前の値を表示。 Console.WriteLine("number=0x{0:X}", tc.number); // 値を変更する関数呼び出し。 Test(&tc); // 変更後の値を表示。 Console.WriteLine("number=0x{0:X}", tc.number); } static void Test(Target* pointer) { // 値を変更。 pointer->number = 0x9ABCDEF0; } // ターゲットの型。 // 値型でなければいけない。(フィールドも。) struct Target { public uint number; } } }
感想
これは、ポインタを使わずにoutキーワードを使えば簡単に同じことをできると思いました。
ソースコードのダウンロード