2014-10-29 59 views

回答

1

在C/C++,一个声明了一个二维阵列一样JAVA,但由编译器的存储器分配是不同。例如,在C中,将一个int的二维数组声明为连续的内存块。

int a[][]=new int[2][4] 

被分配为32(2 * 4 * 4)字节的连续块。它只有一个指向块开始的引用。如果你想访问(i,j)处的元素,那么它返回参考a +(i * 2 + j)处的值。

但是在java中,它分配了一个2个指针的数组并重新分配每一行。

a= new int[2][]; 
a[0] = new int[4]; 
a[1] = new int[4]; 

所以你可以修改每一行的引用。

但是在C++中,您也可以通过使用以下代码来实现JAVA行为。

int **a = new int*[2]; 
a[0] = new int[4]; 
a[1] = new int[4]; 
a[0] = a[1]; 

如果你需要在C中,你应该可以用malloc做同样的事情。

0

在C++:

int **a = new int*[2]; 
a[0] = new int[4]; 
a[1] = a[0]; 

在C:

int **a = malloc(2*sizeof(*a)); 
a[0] = malloc(4*sizeof(*a[0])]; 
a[1] = a[0]; 
相关问题