所有。我的C ++教授向我提出了一个有趣的问题。它显然也用于一些编程工作面试。
这是情况。我有一个int的二维数组(矩阵):
int array1[][2] = {{11, 12}, {21, 22}};
我想创建第二个二维数组array2,它指向第一个数组。也就是说,它们会在内存中占据相同的空间。
显而易见的解决方案是使用指针。所以,我像这样声明了array2:
int (*array2)[2][2];
array2 = &array1;
这似乎有效。现在,这是抓住了。我试图从array1中减去11,但是通过引用array2来实现。以下是我要完成的代码:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
// Trying to do the equivalent of this:
array1[i][j] -= 11;
}
}
我在内部for循环的主体中尝试了以下内容,但都没有成功:
// Second row not affected
*(array2[i][j]) -= 11;
// Second row not affected
*(*(array2[i]) + j) -= 11;
// incompatible types in assignment of `int' to `int[2]'
*( *(array2 + i) + j) -= 11;
有什么想法吗?我怀疑有一些简单的东西,我只是没有来到这里。
谢谢!
答案 0 :(得分:5)
array2
指向array1
,因此您可以使用array1
转到*array2
。试试(*array2)[i][j]
。
答案 1 :(得分:1)
由于这是C ++,您可以使用引用创建别名数组,这正是它们所做的。
int array1[][2] = {{11, 12}, {21, 22}};
int (&array2)[2][2] = array1;
for(int i=0; i<2; ++i)
for(int j=0; j<2; ++j)
array2[i][j] -= 11;
虽然问题更可能是C问题,期望array2是指向array1第一行的指针
int array1[][2] = {{11, 12}, {21, 22}};
int (*array2)[2] = array1;
for(int i=0; i<2; ++i)
for(int j=0; j<2; ++j)
array2[i][j] -= 11;