質問

いmultidimentionalの配列へのポインタの整数の未知のランク)が渡された私として機能など:

    public unsafe static void MyMethod(Array source, ...)
    {
         //...
    }

多次元配列のポインタが建設されている以外の方法と手渡されます。次に例を示します。

int*[,,,] testArray = new int*[10,10,5,5];

MyMethod(testArray);

設定はどのように行うのですか値は、実行時の計算指数の配列?配列に格納します。SetValue(...)コンビニエンスストアでのお支微非ポインタ配列が拒否には、int*配列になります。使用反射板、SetValueすの呼び出しInternalSetValueるオブジェクトの値で示していexternやまだひさしをはじめとする参照を実施します。私たちの試みを通過する箱入りのポインタが幸運をもたらした。

役に立ちましたか?

解決

この作品ます:

unsafe static void MyMethod(int** array)
{
    array[10] = (int*)0xdeadbeef;
}

private static unsafe void Main()
{
    int*[, , ,] array = new int*[10, 10, 10, 10];

    fixed (int** ptr = array)
    {
        MyMethod(ptr);
    }

    int* x = array[0, 0, 1, 0]; // == 0xdeadbeef
}

それは助けていますか?

<時間>

専門家への質問:?それは、配列がメモリに連続して割り当てられていると仮定することが間違っている

他のヒント

このなかできないリンク先のホームページの内容のポインタです。純できないの Array.SetValue 査に合格することが int*.

きを宣言する MyMethod 受け入れ int*[,,,] ょうか?

編集: のためにさらに読む 興味深い最近の投稿からエリック-Lippert.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top