たかやまのプログラミング

プログラミング中心のブログです。

ポインタを使った値型の参照渡し

takym.code.blog


この記事は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キーワードを使えば簡単に同じことをできると思いました。

ソースコードのダウンロード