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[][]p。在这种情况下,数组的q行为类似于类型数组的数组int(这与前一种情况完全不同)。

问题:为什么q在此声明中将 ,int []p, q[];视为二维数组?


附加信息:

以下语法看起来很奇怪。

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 回答
10

声明变量的明智方法是

type name

所以如果类型是int[],我们应该写

int[] array

从不写

int array[]

这是胡言乱语(尽管这是合法的)

于 2013-05-26T00:36:15.937 回答