2011-02-10 4 views
6

から変換できません:は、私は(多かれ少なかれ)のようなコードを持ってダブル[] [] [*、*]倍増する

public void INeedHolidaysNow(double[,]){ 
    //... Code to take a break from coding and fly to Hawaii 
} 

double[][] WageLossPerVacationDay = new double[10][5]; 

INeedHolidays(WageLossPerVacationDay); // >>throws the Exception in the Title 

私はむしろタントループで構成されていthis post上の解決策を見つけました野蛮なキャストをしようとする

私の質問はなぜですか?一見したところで見えるかもしれないものが実現可能なキャストにならないようにするメモリ割り当ての中で何が起こるのでしょうか?構造的には、両方の表現が全く同じであるように見えます。私がここで紛失しているのは何ですか?

EDIT: 外部ライブラリから提供されているように "double [] []"を使用する必要があります。

答えて

10

1つはギザギザの配列、もう1つは大きなブロックです。

double[][]は、doubleの配列を含む配列です。その形は必ずしも長方形ではありません。 cの意味では、double**

double[,]は、メモリの1つの大きなブロックであり、常に矩形です。 Cの言葉では、要素にアクセスするためにmyArray[x+y*width]を使用するのはdouble *です。

+0

CodeInChaos stroke再び;-)メモリの質問には常に正確で関連しています。 Thanx –

2

単純に、[,]アレイ(2Dアレイ)と[][]アレイ(ギザギザアレイ)は同じではありません。

[,]アレイは、矩形で視覚的に表すことができ(したがって、矩形アレイとも呼ばれる)、[][]アレイは、他の1Dアレイを含む1Dアレイです。

一方を他方にキャストできるのはあまり意味がありません。

0

あなたはこのようなあなたのdouble配列を定義する必要があります。

double[,] WageLossPerVacationDay = new double[3, 5]; 

そして、それが動作するはずです!

hth

+0

Thanx。それは私の指摘ではなく、コードは単なる例であり、配列の配列を実際に使用する必要があります –

関連する問題