问题:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
A. 一个一维数组,其每个元素是个二维数组
B. 一个二维数组,其每个元素是个一维数组
思路一:定义方式
定义一个数组的方式是在类型后面加"[]",所以应该是A
思路二:使用方式
按照A, 假如说这是一个一维数组,那我们获取其一个int值的时候,就要写成
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
按照B, 如果这是一个二维数组,那我们取值时就可以很自然地写成
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
思路三:初始化方式
按照A, 应该这么初始化
crazy
=
new
int
[,][
20
];
按照B, 应该这么初始化
crazy
=
new
int
[][
4
,
5
];
看起来两个都很怪异。
答案:
正确答案是,这是一个二维数组,其每个元素是个一维数组,也就是B。
解释:
主要是按照思路B,原则是保证定义及使用的一致性。至于思路三,则两个假设都不正确,正确的初始化方式是
crazy
=
new
int
[
4
,
5
][];
也就是说,依然是和定义方式保持一致的。
Eric在文中写道,他们最初设计语法和编译器时也在考虑这个问题,但最终还是为了保证易于理解和使用而采用了现在的方案。我认为,编译器存在的目的就是让程序员可以不必纠缠于一些底层的细节,而能够专注于逻辑实现,去体现人与机器所不同的地方。因此,这样的实现方式也许在C语言程序员的眼中是很怪异的,但却是必须支持的。