这适用于Java:
int a[][]=new int[2][4];
a[1]=a[0];
但是在C中它不起作用。 反正有可能吗?
答案 0 :(得分: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做同样的事情。
答案 1 :(得分: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];