定义。在谭浩强的《
C程序设计(第二版)》里
(P122)是:数组是有序数据的集合。在钱能的《
C++程序设计教程》里
(P120)是:数组是若干同类型的变量组成的集合。在《Java语言导学
(第三版,中文)》里
(P132)是:数组是一种保存相同类型的多个值的结构。根据我的使用体会来看,数组是一个集合,元素类型相同,无序。谭书中所谓有序应该是指数据在数组中存放的顺序,而非这些数据之间逻辑的顺序关系吧。
先关注这团一维数组相关的糨糊,C和CPP和Java到底允许哪些方式?以下表去做验证。
分这几个情况分别验证下:完整、前空、中空、后空、间隔。
定义方式 | C | CPP | Java |
int a[ ]={1, 2, 3, 4, 5} | √ | √ | √ |
int a[5]={1, 2, 3, 4, 5} | √ | √ | × |
int a[ ]={ , , 3, 4, 5} | × | × | × |
int a[5]={ , , 3, 4, 5} | × | × | × |
int a[ ]={1, , 3, 4, 5} | × | × | × |
int a[5]={1, , 3, 4, 5} | × | × | × |
int a[ ]={1, 2, 3, 4, } | √ 随机数 | √ 随机数 | 编译通过,运行时异常 |
int a[5]={1, 2, 3, 4, } | √ 0 | √ 0 | × |
int a[ ]={1, , 3, , 5} | × | × | × |
int a[5]={1, , 3, , 5} | × | × | × |
因为间隔的情况必然包括前空或中空的情况,而前空和中空的情况都是不允许的,故不用验证就能得出间隔是不允许的。
这个实验仅考察了一维整形数组的情况,数组定义方式并不爽目,int 数组的类型应该写作 int[] 更好 。多维的情况还没考察,关于Java的static情况也没有考察。已知Java能定义多维不等长的数组。关于Collection和Vector等内容等日后有时间再说。
另外,C编译后的执行文件17K,而CPP编译后的执行文件是535K,Java编译后的class文件只有4K。
PS the version of the Compilers are follows:
C and CPP:
gcc version 3.3.1 (mingw special 20030804-1)
JDK: 1.5.0_04