35

以下は、Java での明白で通常の配列の宣言と初期化です。

int r[], s[];       //<-------
r=new int[10];
s=new int[10];

[]以下に示すように、宣言ステートメントでの位置が変更されると、非常によく似たケースが異なる動作をします。

int []p, q[];       //<-------
p=new int[10];
q=new int[10][10];

宣言を見てください。の位置がからに[]変更されました。この場合、配列は型の配列の配列のように動作します(これは前のケースとはまったく異なります)。r[][]pqint

質問:qこの宣言でint []p, q[];, が 2 次元配列として扱われるのはなぜですか?


追加情報:

次の構文は奇妙に見えます。

int []a[];

int a[][];ただし、これは問題なく準拠しており、 orのように動作しint [][]a;ます。

したがって、以下の場合はすべて有効です。

int [][]e[][][];
int [][][][][]f[][][][];
4

2 に答える 2

43

JLS on Arraysを見てください:

[]、宣言の先頭で型の一部として、または特定の変数の宣言子の一部として、またはその両方として表示される場合があります。

C および C++ の伝統への同意として、宣言子でブラケットを使用できます。ただし、変数宣言の一般規則では、型と宣言子の両方に括弧を使用できるため、ローカル変数の宣言は次のようになります。

float[][] f[][], g[][][], h[];  // Yechh!

一連の宣言と同等です。

float[][][][] f;
float[][][][][] g;
float[][][] h;

たとえば、次のようになります。

int []p, q[];

ただです

int[] p, q[]

実際には

int p[]; int q[][]

残りはすべて似ています。

于 2013-05-25T18:33:06.310 に答える