【二维数组】java、c定义二维数组角标省略
C: 一维可省略 二维不可
-
c: 定义多维数组时,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小
-
这是由编译器原理限制的:
- 设有数组 int a[m][n],要访问 a[i][j]的值
- 编译器的寻址方式:
&a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); // 注意 n 为第二维的维数
-
省略第一维,编译器会根据初始化语句自动决定第一维度。
-
二维数组的其他理解:
- 一维的数字代表分配内存的背书,二维数字代表分配内存的长度;
- 倍数可以让机器数,长度
Java: 一维不可省略 二维可
- Java的二维数组是数组的数组
- 数组空间不是连续分配的,所以不要求二维数组的每一维大小相同
- 二维简单数组类型数组的动态初始化:
int[][] a = new int[2][];
a[0] = new int[3];
a[1] = new int[5];
- 对二维复合数组类型的数组:
- 必须先为最高维分配引用空间,然后再顺次为低维分配空间;
- 并且,必须为每个数组元素单独分配空间,前面不可省略,后面可以省略