【二维数组】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];
  • 对二维复合数组类型的数组:
    • 必须先为最高维分配引用空间,然后再顺次为低维分配空间;
    • 并且,必须为每个数组元素单独分配空间,前面不可省略,后面可以省略

参考链接

END

posted @ 2024-08-22 14:33  anliux  阅读(23)  评论(0编辑  收藏  举报