有一个三维数组a(10)(9)(8)每个元素在内存中占3个存储单位,a的首地址a(0)(0)(0)
是100。问:a(4)(5)(7)的地址和a(1)(5)(6)的地址分别是多少

解决方案 »

  1.   

    我想说的各位有没有办法JAVA程序使用代码将他写出来,并且能够运行出正确的结果
      

  2.   

    用程序,可以这样吧,或者做一个函数,把数组下标当作参数
    int[][][] a = new int[10][9][8];
    int count = 0;
    for (int i=0; i<10; i++) {
        for (int j=0; j<9; j++) {
            for (int k=0; k<8; k++) {
                a[i][j][k] = count++; //这里统计位置偏移数
            }
        }
    }
    System.out.println("&a[4][5][7]=" + (100 + a[4][5][7]*3));
    System.out.println("&a[1][5][6]=" + (100 + a[1][5][6]*3));
    或者
    getAddress(int[] a, int i, int j, int k) {
        return (100 + a[i][j][k] * 3); 
    }
    System.out.println("&a[4][5][7]=" + getAddress(4, 5, 7));
    System.out.println("&a[1][5][6]=" + getAddress(1, 5, 6));不知道LZ是不是这一个意思
      

  3.   

    xuehuashijie() 的答案: a(4)(5)(7)的地址=100+(5*10*9+6*9+8)*3=1636
    a(1)(5)(6)的地址=100+(2*10*9+6*9+7)*3=823 中将java的array和c中的等同起来,这点还有些怀疑. java的多维数组是不是放在一个连续空间的?如果真的是,那么代为解释他的答案: 假定 array a[i][j][k], 则 元素 a[x][y][z] 是第 x*y*z+y*z+z 个(这里将a[0][0][0]当做第0个)
    然后可得地址如上. 不过有可能不是一个连续空间,因为java的 多维array是 array of arrays,所以自己还是倾向于一楼的答复:不确定. 希望高人给个解答
      

  4.   

    有什么看不懂的?
    a[0][0][0]的地址是100,存储单元是3,那么
    a[0][0][1]的地址就是100+3
    a[0][0][2]的地址就是100+3+3=100+2*3
    ...
    a[0][0][7]的地址就是100+3+3=100+7*3
    a[0][1][0]的地址=100+8*3
    a[0][1][1]的地址=100+9*3=100+1*8*3+1*3 //对照数组下标,自己想想吧
    依次类推
    a[4][5][7]的地址=100+7(第3维下标)*3+5(第2维下标)*8(第三维长度)*3+4(第一维下标)*9(第二维长度)*8(第三维长度)*3=1105明白了吧?
      

  5.   

    x*y*z+y*z+z 应该是 x*j*k+y*k+z, 抱歉
      

  6.   

    确实忽略了,java的数组内存分配不一定是连续的,那就无法确定了
      

  7.   

    谢谢qybao(阿宝)现在给分,结帖。