ポインタを使ってメモリにアクセスできるので、暗黙的に型を別の型に変換できるのではないかと思いましたのでC#で試してみました。
(※ポインタを使うには ‘/unsafe’ でコンパイルする必要があります。)
using System;
namespace MemoryTest
{
// ポインタにするためアンセーフにする。
static unsafe class Program
{
static void Main(string[] args)
{
// ポインタを使う変数。
Target tc = new Target();
// tc のポインタ。
Target* tc_pointer = &tc;
// 値を代入する。
tc_pointer->number1 = 0x12345678;
tc_pointer->number2 = 0x00ABCDEF;
// tc と同じアドレスで、LongTarget型のポインタを作る。
LongTarget* lt_pointer = ((LongTarget*)(tc_pointer));
// 結果の表示
Console.WriteLine("アドレス:0x{0:X}", new IntPtr(tc_pointer));
Console.WriteLine("number1=0x{0:X}", tc.number1);
Console.WriteLine("number2=0x{0:X}", tc.number2);
Console.WriteLine("number3=0x{0:X}", lt_pointer->number3);
}
// ターゲットの型。
// 値型でなければいけない。(フィールドも。)
struct Target
{
public uint number1;
public uint number2;
}
// ターゲットの型。
struct LongTarget
{
public ulong number3;
}
}
}
「ポインタを使った暗黙的な型変換」への1件のフィードバック