如何使数组的第二行指向C中的第一行

时间:2014-10-29 03:30:21

标签: java c arrays pointers object

这适用于Java:

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

但是在C中它不起作用。 反正有可能吗?

2 个答案:

答案 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];