前回は、ポインタを使ってメモリにアクセスできるので、暗黙的に型を別の型に変換できるのではないかと思いましたのでC#で試してみました。今回は、ポインタを使って値型の参照渡しをしてみたいと思います。
(※ポインタを使うには ‘/unsafe’ でコンパイルする必要があります。)
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キーワードを使えば簡単に同じことをできると思いました。